60806040526001600b60006101000a81548160ff021916908315150217905550610648600e60006101000a81548161ffff021916908361ffff16021790555061015e600e60026101000a81548161ffff021916908361ffff1602179055506703782dace9d90000600f553480156200007657600080fd5b50336040518060400160405280601581526020017f4e617468616e416e644c6172727947656e6573697300000000000000000000008152506040518060400160405280600381526020017f504f5000000000000000000000000000000000000000000000000000000000008152508160029081620000f59190620006df565b508060039081620001079190620006df565b5062000118620001dc60201b60201c565b6000819055505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001955760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200018c91906200080b565b60405180910390fd5b620001a681620001e560201b60201c565b506000600b60016101000a81548160ff021916908315150217905550620001d633610294620002ab60201b60201c565b620008b7565b60006001905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000620002bd6200045b60201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff161115620003255781816040517f6f483d090000000000000000000000000000000000000000000000000000000081526004016200031c9291906200088a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200039a5760006040517fb6d9900a0000000000000000000000000000000000000000000000000000000081526004016200039191906200080b565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600c60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000612710905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000602082019050620008226000830184620007fa565b92915050565b60006bffffffffffffffffffffffff82169050919050565b6000620008616200085b620008558462000828565b62000595565b6200058b565b9050919050565b620008738162000840565b82525050565b62000884816200058b565b82525050565b6000604082019050620008a1600083018562000868565b620008b0602083018462000879565b9392505050565b61479d80620008c76000396000f3fe6080604052600436106103765760003560e01c8063830b3b4b116101d1578063ac2c4c9211610102578063d22b3e80116100a0578063e63a0e731161006f578063e63a0e7314610c22578063e90c349314610c4d578063e985e9c514610c78578063f2fde38b14610cb557610376565b8063d22b3e8014610b85578063d684534e14610bb0578063dddc924914610bdb578063dfe6425c14610bf757610376565b8063b88d4fde116100dc578063b88d4fde14610ad8578063c87b56dd14610af4578063cb2c191c14610b31578063cfc86f7b14610b5a57610376565b8063ac2c4c9214610a49578063ac751b1d14610a72578063b564f8c414610aaf57610376565b806391b7f5ed1161016f578063a0dcfc6e11610149578063a0dcfc6e146109b5578063a22cb465146109de578063a4d66daf14610a07578063a6559fe414610a3257610376565b806391b7f5ed1461093857806395d89b4114610961578063985934e71461098c57610376565b806386b4606f116101ab57806386b4606f1461087e57806389a8e064146108a75780638c8f437a146108e45780638da5cb5b1461090d57610376565b8063830b3b4b14610811578063837ee9e31461083c5780638456cb591461086757610376565b80633f4ba83a116102ab5780635c975abb116102495780636352211e116102235780636352211e1461075757806370a0823114610794578063715018a6146107d15780638136a90f146107e857610376565b80635c975abb146106d85780635e479321146107035780636331fa9f1461072e57610376565b80634295e857116102855780634295e857146106305780634c746b771461064757806355f804b3146106845780635be0b560146106ad57610376565b80633f4ba83a146105d25780634023efca146105e957806342842e0e1461061457610376565b806318160ddd116103185780632a55205a116102f25780632a55205a1461052b5780632dc5f2091461056957806336e08df6146105925780633ccfd60b146105bb57610376565b806318160ddd146104bb57806322fd6247146104e657806323b872dd1461050f57610376565b8063095ea7b311610354578063095ea7b3146104205780630c0aa0271461043c57806314412e401461046757806316257e901461049057610376565b806301ffc9a71461037b57806306fdde03146103b8578063081812fc146103e3575b600080fd5b34801561038757600080fd5b506103a2600480360381019061039d919061339c565b610cde565b6040516103af91906133e4565b60405180910390f35b3480156103c457600080fd5b506103cd610cf0565b6040516103da919061348f565b60405180910390f35b3480156103ef57600080fd5b5061040a600480360381019061040591906134e7565b610d82565b6040516104179190613555565b60405180910390f35b61043a6004803603810190610435919061359c565b610e01565b005b34801561044857600080fd5b50610451610e59565b60405161045e91906135f9565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613679565b610e6d565b005b34801561049c57600080fd5b506104a5610ecb565b6040516104b291906133e4565b60405180910390f35b3480156104c757600080fd5b506104d0610ee2565b6040516104dd91906136d5565b60405180910390f35b3480156104f257600080fd5b5061050d600480360381019061050891906136f0565b610ef9565b005b6105296004803603810190610524919061371d565b610f0d565b005b34801561053757600080fd5b50610552600480360381019061054d9190613770565b61122f565b6040516105609291906137b0565b60405180910390f35b34801561057557600080fd5b50610590600480360381019061058b9190613679565b611419565b005b34801561059e57600080fd5b506105b960048036038101906105b491906136f0565b611477565b005b3480156105c757600080fd5b506105d061148b565b005b3480156105de57600080fd5b506105e76114ed565b005b3480156105f557600080fd5b506105fe6114ff565b60405161060b91906133e4565b60405180910390f35b61062e6004803603810190610629919061371d565b611555565b005b34801561063c57600080fd5b50610645611575565b005b34801561065357600080fd5b5061066e600480360381019061066991906136f0565b611587565b60405161067b91906133e4565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a69190613909565b6115dd565b005b3480156106b957600080fd5b506106c26115f8565b6040516106cf91906135f9565b60405180910390f35b3480156106e457600080fd5b506106ed61160c565b6040516106fa91906133e4565b60405180910390f35b34801561070f57600080fd5b50610718611623565b60405161072591906135f9565b60405180910390f35b34801561073a57600080fd5b506107556004803603810190610750919061397e565b611629565b005b34801561076357600080fd5b5061077e600480360381019061077991906134e7565b6116cb565b60405161078b9190613555565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b691906136f0565b6116dd565b6040516107c891906136d5565b60405180910390f35b3480156107dd57600080fd5b506107e6611795565b005b3480156107f457600080fd5b5061080f600480360381019061080a9190613679565b6117a9565b005b34801561081d57600080fd5b50610826611807565b60405161083391906133e4565b60405180910390f35b34801561084857600080fd5b5061085161181a565b60405161085e91906136d5565b60405180910390f35b34801561087357600080fd5b5061087c611820565b005b34801561088a57600080fd5b506108a560048036038101906108a0919061397e565b611832565b005b3480156108b357600080fd5b506108ce60048036038101906108c991906136f0565b61185a565b6040516108db91906133e4565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613679565b6118b0565b005b34801561091957600080fd5b5061092261190e565b60405161092f9190613555565b60405180910390f35b34801561094457600080fd5b5061095f600480360381019061095a91906134e7565b611938565b005b34801561096d57600080fd5b5061097661194a565b604051610983919061348f565b60405180910390f35b34801561099857600080fd5b506109b360048036038101906109ae91906134e7565b6119dc565b005b3480156109c157600080fd5b506109dc60048036038101906109d791906139ef565b611a9e565b005b3480156109ea57600080fd5b50610a056004803603810190610a009190613a5b565b611ab4565b005b348015610a1357600080fd5b50610a1c611b57565b604051610a2991906136d5565b60405180910390f35b348015610a3e57600080fd5b50610a47611b73565b005b348015610a5557600080fd5b50610a706004803603810190610a6b91906136f0565b611b85565b005b348015610a7e57600080fd5b50610a996004803603810190610a9491906136f0565b611b99565b604051610aa691906136d5565b60405180910390f35b348015610abb57600080fd5b50610ad66004803603810190610ad1919061397e565b611bb0565b005b610af26004803603810190610aed9190613b3c565b611cdf565b005b348015610b0057600080fd5b50610b1b6004803603810190610b1691906134e7565b611d52565b604051610b28919061348f565b60405180910390f35b348015610b3d57600080fd5b50610b586004803603810190610b5391906136f0565b611df0565b005b348015610b6657600080fd5b50610b6f611e04565b604051610b7c919061348f565b60405180910390f35b348015610b9157600080fd5b50610b9a611e92565b604051610ba791906133e4565b60405180910390f35b348015610bbc57600080fd5b50610bc5611ee8565b604051610bd291906133e4565b60405180910390f35b610bf56004803603810190610bf091906134e7565b611efb565b005b348015610c0357600080fd5b50610c0c612185565b604051610c1991906136d5565b60405180910390f35b348015610c2e57600080fd5b50610c37612199565b604051610c4491906135f9565b60405180910390f35b348015610c5957600080fd5b50610c626121ad565b604051610c6f9190613555565b60405180910390f35b348015610c8457600080fd5b50610c9f6004803603810190610c9a9190613bbf565b6121c5565b604051610cac91906133e4565b60405180910390f35b348015610cc157600080fd5b50610cdc6004803603810190610cd791906136f0565b612259565b005b6000610ce9826122df565b9050919050565b606060028054610cff90613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2b90613c2e565b8015610d785780601f10610d4d57610100808354040283529160200191610d78565b820191906000526020600020905b815481529060010190602001808311610d5b57829003601f168201915b5050505050905090565b6000610d8d82612359565b610dc3576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b81610e0b8161185a565b610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190613cab565b60405180910390fd5b610e548383610e01565b505050565b600e60029054906101000a900461ffff1681565b610e756123b8565b60005b828290508161ffff161115610ec657610ebb83838361ffff16818110610ea157610ea0613ccb565b5b9050602002016020810190610eb691906136f0565b61243f565b806001019050610e78565b505050565b6000600b60009054906101000a900460ff16905090565b6000610eec61249a565b6001546000540303905090565b610f016123b8565b610f0a816124a3565b50565b6000610f18826124f5565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f7f576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610f8b846125c1565b91509150610fa18187610f9c6125e8565b6125f0565b610fed57610fb686610fb16125e8565b6121c5565b610fec576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611053576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110608686866001612634565b801561106b57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055506111398561111588888761263a565b7c020000000000000000000000000000000000000000000000000000000017612662565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036111bf57600060018501905060006004600083815260200190815260200160002054036111bd5760005481146111bc578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611227868686600161268d565b505050505050565b6000806000600d60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16036113c457600c6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b60006113ce612693565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff16866113fa9190613d29565b6114049190613d9a565b90508160000151819350935050509250929050565b6114216123b8565b60005b828290508161ffff1611156114725761146783838361ffff1681811061144d5761144c613ccb565b5b905060200201602081019061146291906136f0565b61269d565b806001019050611424565b505050565b61147f6123b8565b6114888161243f565b50565b6114936123b8565b6000479050733a97b0513dd965d3799da205877fb1b1a4a7bdea73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050506114ea57600080fd5b50565b6114f56123b8565b6114fd6126f8565b565b60006115096123b8565b60001515601160009054906101000a900460ff16151503611540576001601160006101000a81548160ff0219169083151502179055505b601160009054906101000a900460ff16905090565b61157083838360405180602001604052806000815250611cdf565b505050565b61157d6123b8565b61158561275b565b565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115e56123b8565b80601090816115f49190613f77565b5050565b600e60049054906101000a900461ffff1681565b6000600b60019054906101000a900460ff16905090565b610dac81565b6116316123b8565b610dac61ffff168161ffff16611645610ee2565b61164f9190614049565b1115611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906140ef565b60405180910390fd5b600e60009054906101000a900461ffff16816116ac919061410f565b600e60006101000a81548161ffff021916908361ffff16021790555050565b60006116d6826124f5565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611744576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b61179d6123b8565b6117a76000612778565b565b6117b16123b8565b60005b828290508161ffff161115611802576117f783838361ffff168181106117dd576117dc613ccb565b5b90506020020160208101906117f291906136f0565b61283e565b8060010190506117b4565b505050565b601160009054906101000a900460ff1681565b600f5481565b6118286123b8565b611830612890565b565b61183a6123b8565b80600e60046101000a81548161ffff021916908361ffff16021790555050565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6118b86123b8565b60005b828290508161ffff161115611909576118fe83838361ffff168181106118e4576118e3613ccb565b5b90506020020160208101906118f991906136f0565b6124a3565b8060010190506118bb565b505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119406123b8565b80600f8190555050565b60606003805461195990613c2e565b80601f016020809104026020016040519081016040528092919081815260200182805461198590613c2e565b80156119d25780601f106119a7576101008083540402835291602001916119d2565b820191906000526020600020905b8154815290600101906020018083116119b557829003601f168201915b5050505050905090565b6119e4610ecb565b15611a24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1b906141b7565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8990614223565b60405180910390fd5b611a9b816128f3565b50565b611aa66123b8565b611ab08282612901565b5050565b81611abe8161185a565b611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af490613cab565b60405180910390fd5b82611b0781611587565b15611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e9061428f565b60405180910390fd5b611b518484611ab4565b50505050565b6000600e60049054906101000a900461ffff1661ffff16905090565b611b7b6123b8565b611b83612aa3565b565b611b8d6123b8565b611b968161283e565b50565b600080611ba583612ac0565b905080915050919050565b611bb86123b8565b60008161ffff16118015611be45750600e60029054906101000a900461ffff1661ffff168161ffff1611155b611c23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1a90614321565b60405180910390fd5b610dac61ffff168161ffff16611c37610ee2565b611c419190614049565b1115611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c79906143b3565b60405180910390fd5b611ca4733a97b0513dd965d3799da205877fb1b1a4a7bdea8261ffff16612b17565b80600e60029054906101000a900461ffff16611cc091906143d3565b600e60026101000a81548161ffff021916908361ffff16021790555050565b611cea848484610f0d565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611d4c57611d1584848484612b35565b611d4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060611d5d82612359565b611d93576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611d9d612c85565b90506000815103611dbd5760405180602001604052806000815250611de8565b80611dc784612d17565b604051602001611dd8929190614491565b6040516020818303038152906040525b915050919050565b611df86123b8565b611e018161269d565b50565b60108054611e1190613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3d90613c2e565b8015611e8a5780601f10611e5f57610100808354040283529160200191611e8a565b820191906000526020600020905b815481529060010190602001808311611e6d57829003601f168201915b505050505081565b6000611e9c6123b8565b60011515601160009054906101000a900460ff16151503611ed3576000601160006101000a81548160ff0219169083151502179055505b601160009054906101000a900460ff16905090565b600b60009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611f69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6090614223565b60405180910390fd5b611f71612d67565b60011515601160009054906101000a900460ff161515036120be57600e60009054906101000a900461ffff1661ffff1681611faa610ee2565b611fb49190614049565b1115611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec9061450c565b60405180910390fd5b600e60049054906101000a900461ffff1661ffff168161201433612ac0565b61201e9190614049565b111561205f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120569061459e565b60405180910390fd5b80600f5461206d9190613d29565b3410156120af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a69061460a565b60405180910390fd5b6120b93382612b17565b612182565b600e60009054906101000a900461ffff1661ffff16816120dc610ee2565b6120e69190614049565b1115612127576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211e9061450c565b60405180910390fd5b80600f546121359190613d29565b341015612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e9061460a565b60405180910390fd5b6121813382612b17565b5b50565b600080612190612da8565b90508091505090565b600e60009054906101000a900461ffff1681565b733a97b0513dd965d3799da205877fb1b1a4a7bdea81565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122616123b8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036122d35760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016122ca9190613555565b60405180910390fd5b6122dc81612778565b50565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612352575061235182612dbb565b5b9050919050565b60008161236461249a565b11158015612373575060005482105b80156123b1575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b6123c0612e25565b73ffffffffffffffffffffffffffffffffffffffff166123de61190e565b73ffffffffffffffffffffffffffffffffffffffff161461243d57612401612e25565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016124349190613555565b60405180910390fd5b565b6001600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006001905090565b600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b6000808290508061250461249a565b1161258a576000548110156125895760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821603612587575b6000810361257d576004600083600190039350838152602001908152602001600020549050612553565b80925050506125bc565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e8612651868684612e2d565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b6000612710905090565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612700612e36565b6000600b60016101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612744612e25565b6040516127519190613555565b60405180910390a1565b6000600b60006101000a81548160ff021916908315150217905550565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905550565b612898612d67565b6001600b60016101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128dc612e25565b6040516128e99190613555565b60405180910390a1565b6128fe816000612e76565b50565b600061290b612693565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff1611156129705781816040517f6f483d0900000000000000000000000000000000000000000000000000000000815260040161296792919061465b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e25760006040517fb6d9900a0000000000000000000000000000000000000000000000000000000081526004016129d99190613555565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600c60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6001600b60006101000a81548160ff021916908315150217905550565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b612b318282604051806020016040528060008152506130c8565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b5b6125e8565b8786866040518563ffffffff1660e01b8152600401612b7d94939291906146d9565b6020604051808303816000875af1925050508015612bb957506040513d601f19601f82011682018060405250810190612bb6919061473a565b60015b612c32573d8060008114612be9576040519150601f19603f3d011682016040523d82523d6000602084013e612bee565b606091505b506000815103612c2a576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b606060108054612c9490613c2e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cc090613c2e565b8015612d0d5780601f10612ce257610100808354040283529160200191612d0d565b820191906000526020600020905b815481529060010190602001808311612cf057829003601f168201915b5050505050905090565b606060a060405101806040526020810391506000825281835b600115612d5257600184039350600a81066030018453600a8104905080612d30575b50828103602084039350808452505050919050565b612d6f61160c565b15612da6576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000612db261249a565b60005403905090565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b60009392505050565b612e3e61160c565b612e74576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000612e81836124f5565b90506000819050600080612e94866125c1565b915091508415612efd57612eb08184612eab6125e8565b6125f0565b612efc57612ec583612ec06125e8565b6121c5565b612efb576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b612f0b836000886001612634565b8015612f1657600082555b600160806001901b03600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612fbe83612f7b8560008861263a565b7c02000000000000000000000000000000000000000000000000000000007c01000000000000000000000000000000000000000000000000000000001717612662565b600460008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036130445760006001870190506000600460008381526020019081526020016000205403613042576000548114613041578460046000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130ae83600088600161268d565b600160008154809291906001019190505550505050505050565b6130d28383613165565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461316057600080549050600083820390505b6131126000868380600101945086612b35565b613148576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106130ff57816000541461315d57600080fd5b50505b505050565b600080549050600082036131a5576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131b26000848385612634565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055506132298361321a600086600061263a565b61322385613320565b17612662565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b8181146132ca57808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460018101905061328f565b5060008203613305576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061331b600084838561268d565b505050565b60006001821460e11b9050919050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61337981613344565b811461338457600080fd5b50565b60008135905061339681613370565b92915050565b6000602082840312156133b2576133b161333a565b5b60006133c084828501613387565b91505092915050565b60008115159050919050565b6133de816133c9565b82525050565b60006020820190506133f960008301846133d5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561343957808201518184015260208101905061341e565b60008484015250505050565b6000601f19601f8301169050919050565b6000613461826133ff565b61346b818561340a565b935061347b81856020860161341b565b61348481613445565b840191505092915050565b600060208201905081810360008301526134a98184613456565b905092915050565b6000819050919050565b6134c4816134b1565b81146134cf57600080fd5b50565b6000813590506134e1816134bb565b92915050565b6000602082840312156134fd576134fc61333a565b5b600061350b848285016134d2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061353f82613514565b9050919050565b61354f81613534565b82525050565b600060208201905061356a6000830184613546565b92915050565b61357981613534565b811461358457600080fd5b50565b60008135905061359681613570565b92915050565b600080604083850312156135b3576135b261333a565b5b60006135c185828601613587565b92505060206135d2858286016134d2565b9150509250929050565b600061ffff82169050919050565b6135f3816135dc565b82525050565b600060208201905061360e60008301846135ea565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261363957613638613614565b5b8235905067ffffffffffffffff81111561365657613655613619565b5b6020830191508360208202830111156136725761367161361e565b5b9250929050565b600080602083850312156136905761368f61333a565b5b600083013567ffffffffffffffff8111156136ae576136ad61333f565b5b6136ba85828601613623565b92509250509250929050565b6136cf816134b1565b82525050565b60006020820190506136ea60008301846136c6565b92915050565b6000602082840312156137065761370561333a565b5b600061371484828501613587565b91505092915050565b6000806000606084860312156137365761373561333a565b5b600061374486828701613587565b935050602061375586828701613587565b9250506040613766868287016134d2565b9150509250925092565b600080604083850312156137875761378661333a565b5b6000613795858286016134d2565b92505060206137a6858286016134d2565b9150509250929050565b60006040820190506137c56000830185613546565b6137d260208301846136c6565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61381682613445565b810181811067ffffffffffffffff82111715613835576138346137de565b5b80604052505050565b6000613848613330565b9050613854828261380d565b919050565b600067ffffffffffffffff821115613874576138736137de565b5b61387d82613445565b9050602081019050919050565b82818337600083830152505050565b60006138ac6138a784613859565b61383e565b9050828152602081018484840111156138c8576138c76137d9565b5b6138d384828561388a565b509392505050565b600082601f8301126138f0576138ef613614565b5b8135613900848260208601613899565b91505092915050565b60006020828403121561391f5761391e61333a565b5b600082013567ffffffffffffffff81111561393d5761393c61333f565b5b613949848285016138db565b91505092915050565b61395b816135dc565b811461396657600080fd5b50565b60008135905061397881613952565b92915050565b6000602082840312156139945761399361333a565b5b60006139a284828501613969565b91505092915050565b60006bffffffffffffffffffffffff82169050919050565b6139cc816139ab565b81146139d757600080fd5b50565b6000813590506139e9816139c3565b92915050565b60008060408385031215613a0657613a0561333a565b5b6000613a1485828601613587565b9250506020613a25858286016139da565b9150509250929050565b613a38816133c9565b8114613a4357600080fd5b50565b600081359050613a5581613a2f565b92915050565b60008060408385031215613a7257613a7161333a565b5b6000613a8085828601613587565b9250506020613a9185828601613a46565b9150509250929050565b600067ffffffffffffffff821115613ab657613ab56137de565b5b613abf82613445565b9050602081019050919050565b6000613adf613ada84613a9b565b61383e565b905082815260208101848484011115613afb57613afa6137d9565b5b613b0684828561388a565b509392505050565b600082601f830112613b2357613b22613614565b5b8135613b33848260208601613acc565b91505092915050565b60008060008060808587031215613b5657613b5561333a565b5b6000613b6487828801613587565b9450506020613b7587828801613587565b9350506040613b86878288016134d2565b925050606085013567ffffffffffffffff811115613ba757613ba661333f565b5b613bb387828801613b0e565b91505092959194509250565b60008060408385031215613bd657613bd561333a565b5b6000613be485828601613587565b9250506020613bf585828601613587565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613c4657607f821691505b602082108103613c5957613c58613bff565b5b50919050565b7f4e6f7420707265666572726564206f70657261746f7200000000000000000000600082015250565b6000613c9560168361340a565b9150613ca082613c5f565b602082019050919050565b60006020820190508181036000830152613cc481613c88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d34826134b1565b9150613d3f836134b1565b9250828202613d4d816134b1565b91508282048414831517613d6457613d63613cfa565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613da5826134b1565b9150613db0836134b1565b925082613dc057613dbf613d6b565b5b828204905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613e2d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613df0565b613e378683613df0565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613e74613e6f613e6a846134b1565b613e4f565b6134b1565b9050919050565b6000819050919050565b613e8e83613e59565b613ea2613e9a82613e7b565b848454613dfd565b825550505050565b600090565b613eb7613eaa565b613ec2818484613e85565b505050565b5b81811015613ee657613edb600082613eaf565b600181019050613ec8565b5050565b601f821115613f2b57613efc81613dcb565b613f0584613de0565b81016020851015613f14578190505b613f28613f2085613de0565b830182613ec7565b50505b505050565b600082821c905092915050565b6000613f4e60001984600802613f30565b1980831691505092915050565b6000613f678383613f3d565b9150826002028217905092915050565b613f80826133ff565b67ffffffffffffffff811115613f9957613f986137de565b5b613fa38254613c2e565b613fae828285613eea565b600060209050601f831160018114613fe15760008415613fcf578287015190505b613fd98582613f5b565b865550614041565b601f198416613fef86613dcb565b60005b8281101561401757848901518255600182019150602085019450602081019050613ff2565b868310156140345784890151614030601f891682613f3d565b8355505b6001600288020188555050505b505050505050565b6000614054826134b1565b915061405f836134b1565b925082820190508082111561407757614076613cfa565b5b92915050565b7f546f74616c2063617070656420737570706c7920776f756c642062652065786360008201527f6565646564000000000000000000000000000000000000000000000000000000602082015250565b60006140d960258361340a565b91506140e48261407d565b604082019050919050565b60006020820190508181036000830152614108816140cc565b9050919050565b600061411a826135dc565b9150614125836135dc565b9250828201905061ffff81111561413f5761413e613cfa565b5b92915050565b7f536f7272792c2063616e6e6f74206275726e20746f6b656e732061742074686960008201527f732074696d650000000000000000000000000000000000000000000000000000602082015250565b60006141a160268361340a565b91506141ac82614145565b604082019050919050565b600060208201905081810360008301526141d081614194565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b600061420d601e8361340a565b9150614218826141d7565b602082019050919050565b6000602082019050818103600083015261423c81614200565b9050919050565b7f466f7262696464656e206f70657261746f720000000000000000000000000000600082015250565b600061427960128361340a565b915061428482614243565b602082019050919050565b600060208201905081810360008301526142a88161426c565b9050919050565b7f756e61626c6520746f206d696e7420616e79206675727468657220666f72206660008201527f6f756e6465727300000000000000000000000000000000000000000000000000602082015250565b600061430b60278361340a565b9150614316826142af565b604082019050919050565b6000602082019050818103600083015261433a816142fe565b9050919050565b7f546f74616c20737570706c7920776f756c64206578636565642074686520737560008201527f70706c7920636170000000000000000000000000000000000000000000000000602082015250565b600061439d60288361340a565b91506143a882614341565b604082019050919050565b600060208201905081810360008301526143cc81614390565b9050919050565b60006143de826135dc565b91506143e9836135dc565b9250828203905061ffff81111561440357614402613cfa565b5b92915050565b600081905092915050565b600061441f826133ff565b6144298185614409565b935061443981856020860161341b565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b600061447b600583614409565b915061448682614445565b600582019050919050565b600061449d8285614414565b91506144a98284614414565b91506144b48261446e565b91508190509392505050565b7f43757272656e7420737570706c7920776f756c64206265206578636565646564600082015250565b60006144f660208361340a565b9150614501826144c0565b602082019050919050565b60006020820190508181036000830152614525816144e9565b9050919050565b7f4d617820616d6f756e74207065722077616c6c657420776f756c64206265206560008201527f7863656564656400000000000000000000000000000000000000000000000000602082015250565b600061458860278361340a565b91506145938261452c565b604082019050919050565b600060208201905081810360008301526145b78161457b565b9050919050565b7f45746865722076616c75652073656e7420697320696e636f7272656374000000600082015250565b60006145f4601d8361340a565b91506145ff826145be565b602082019050919050565b60006020820190508181036000830152614623816145e7565b9050919050565b600061464561464061463b846139ab565b613e4f565b6134b1565b9050919050565b6146558161462a565b82525050565b6000604082019050614670600083018561464c565b61467d60208301846136c6565b9392505050565b600081519050919050565b600082825260208201905092915050565b60006146ab82614684565b6146b5818561468f565b93506146c581856020860161341b565b6146ce81613445565b840191505092915050565b60006080820190506146ee6000830187613546565b6146fb6020830186613546565b61470860408301856136c6565b818103606083015261471a81846146a0565b905095945050505050565b60008151905061473481613370565b92915050565b6000602082840312156147505761474f61333a565b5b600061475e84828501614725565b9150509291505056fea2646970667358221220995bbf1f25e6bd1f309c86cefad12e5e8a434bec2defa71ea5fa9017be312d7f64736f6c63430008140033