608060405234801561000f575f80fd5b5060405161435b38038061435b83398181016040528101906100319190610852565b886040518060400160405280601281526020017f54686541726368697465637473447265616d00000000000000000000000000008152506040518060400160405280600381526020017f544144000000000000000000000000000000000000000000000000000000000081525081600390816100ad9190610b50565b5080600490816100bd9190610b50565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610130575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101279190610c2e565b60405180910390fd5b61013f816103dc60201b60201c565b508760065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508660115f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103b08961049f60201b60201c565b6103ce896103c38b61052f60201b60201c565b61057460201b60201c565b505050505050505050610ce5565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6104ad61072c60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361051d575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105149190610c2e565b60405180910390fd5b61052c816103dc60201b60201c565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036105e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d990610cc7565b60405180910390fd5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166106e6576001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600882908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b61073a6107c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1661075e6107cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146107c3576107876107c560201b60201c565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107ba9190610c2e565b60405180910390fd5b565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610821826107f8565b9050919050565b61083181610817565b811461083b575f80fd5b50565b5f8151905061084c81610828565b92915050565b5f805f805f805f805f6101208a8c0312156108705761086f6107f4565b5b5f61087d8c828d0161083e565b995050602061088e8c828d0161083e565b985050604061089f8c828d0161083e565b97505060606108b08c828d0161083e565b96505060806108c18c828d0161083e565b95505060a06108d28c828d0161083e565b94505060c06108e38c828d0161083e565b93505060e06108f48c828d0161083e565b9250506101006109068c828d0161083e565b9150509295985092959850929598565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061099157607f821691505b6020821081036109a4576109a361094d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610a067fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826109cb565b610a1086836109cb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610a54610a4f610a4a84610a28565b610a31565b610a28565b9050919050565b5f819050919050565b610a6d83610a3a565b610a81610a7982610a5b565b8484546109d7565b825550505050565b5f90565b610a95610a89565b610aa0818484610a64565b505050565b5b81811015610ac357610ab85f82610a8d565b600181019050610aa6565b5050565b601f821115610b0857610ad9816109aa565b610ae2846109bc565b81016020851015610af1578190505b610b05610afd856109bc565b830182610aa5565b50505b505050565b5f82821c905092915050565b5f610b285f1984600802610b0d565b1980831691505092915050565b5f610b408383610b19565b9150826002028217905092915050565b610b5982610916565b67ffffffffffffffff811115610b7257610b71610920565b5b610b7c825461097a565b610b87828285610ac7565b5f60209050601f831160018114610bb8575f8415610ba6578287015190505b610bb08582610b35565b865550610c17565b601f198416610bc6866109aa565b5f5b82811015610bed57848901518255600182019150602085019450602081019050610bc8565b86831015610c0a5784890151610c06601f891682610b19565b8355505b6001600288020188555050505b505050505050565b610c2881610817565b82525050565b5f602082019050610c415f830184610c1f565b92915050565b5f82825260208201905092915050565b7f4163636f756e7420616464726573732063616e6e6f7420626520746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f610cb1602a83610c47565b9150610cbc82610c57565b604082019050919050565b5f6020820190508181035f830152610cde81610ca5565b9050919050565b61366980610cf25f395ff3fe608060405234801561000f575f80fd5b50600436106101e3575f3560e01c8063715018a61161010d578063bc8409a4116100a0578063dd62ed3e1161006f578063dd62ed3e14610524578063e4849b3214610554578063f2fde38b14610570578063fbfa77cf1461058c576101e3565b8063bc8409a4146104b0578063bfb451fe146104ce578063d0a5eb4e146104ea578063d469801614610506576101e3565b8063a0712d68116100dc578063a0712d681461042a578063a198043014610446578063a794092014610462578063a9059cbb14610480576101e3565b8063715018a6146103c65780638da5cb5b146103d05780638ea5220f146103ee57806395d89b411461040c576101e3565b806323b62b7511610185578063430bf08a11610154578063430bf08a146103505780635b35f9c91461036e5780636f4a2cd01461038c57806370a0823114610396576101e3565b806323b62b75146102c857806323b872dd146102e6578063296f0a0c14610316578063313ce56714610332576101e3565b806313bb8683116101c157806313bb86831461025357806318160ddd1461026f5780631d92f25e1461028d5780631f53ac02146102ac576101e3565b806306fdde03146101e7578063095ea7b31461020557806311eac85514610235575b5f80fd5b6101ef6105aa565b6040516101fc9190612a93565b60405180910390f35b61021f600480360381019061021a9190612b44565b61063a565b60405161022c9190612b9c565b60405180910390f35b61023d61065c565b60405161024a9190612c10565b60405180910390f35b61026d60048036038101906102689190612c29565b610681565b005b610277610741565b6040516102849190612c63565b60405180910390f35b61029561074a565b6040516102a3929190612dea565b60405180910390f35b6102c660048036038101906102c19190612c29565b6108e4565b005b6102d06109a4565b6040516102dd9190612e2e565b60405180910390f35b61030060048036038101906102fb9190612e47565b6109c9565b60405161030d9190612b9c565b60405180910390f35b610330600480360381019061032b9190612c29565b6109f7565b005b61033a610ab7565b6040516103479190612eb2565b60405180910390f35b610358610abf565b6040516103659190612e2e565b60405180910390f35b610376610ae4565b6040516103839190612e2e565b60405180910390f35b610394610b09565b005b6103b060048036038101906103ab9190612c29565b610e2d565b6040516103bd9190612c63565b60405180910390f35b6103ce610e72565b005b6103d8610e85565b6040516103e59190612e2e565b60405180910390f35b6103f6610ead565b6040516104039190612e2e565b60405180910390f35b610414610ed2565b6040516104219190612a93565b60405180910390f35b610444600480360381019061043f9190612ecb565b610f62565b005b610460600480360381019061045b9190612c29565b6114d5565b005b61046a611595565b6040516104779190612e2e565b60405180910390f35b61049a60048036038101906104959190612b44565b6115ba565b6040516104a79190612b9c565b60405180910390f35b6104b86115dc565b6040516104c59190612e2e565b60405180910390f35b6104e860048036038101906104e39190612c29565b611601565b005b61050460048036038101906104ff9190612c29565b6116c1565b005b61050e611781565b60405161051b9190612e2e565b60405180910390f35b61053e60048036038101906105399190612ef6565b6117a6565b60405161054b9190612c63565b60405180910390f35b61056e60048036038101906105699190612ecb565b611828565b005b61058a60048036038101906105859190612c29565b611a4f565b005b610594611ad3565b6040516105a19190612f54565b60405180910390f35b6060600380546105b990612f9a565b80601f01602080910402602001604051908101604052809291908181526020018280546105e590612f9a565b80156106305780601f1061060757610100808354040283529160200191610630565b820191905f5260205f20905b81548152906001019060200180831161061357829003601f168201915b5050505050905090565b5f80610644611af8565b9050610651818585611aff565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610689611b11565b610691610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f59061303a565b60405180910390fd5b8060105f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f600254905090565b6060805f60088054905067ffffffffffffffff81111561076d5761076c613058565b5b60405190808252806020026020018201604052801561079b5781602001602082028036833780820191505090505b5090505f5b6008805490508110156108525760095f600883815481106107c4576107c3613085565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205482828151811061083957610838613085565b5b60200260200101818152505080806001019150506107a0565b50600881818054806020026020016040519081016040528092919081815260200182805480156108d457602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161088b575b5050505050915092509250509091565b6108ec611b11565b6108f4610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610961576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109589061303a565b60405180910390fd5b80600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806109d3611af8565b90506109e0858285611b98565b6109eb858585611c2a565b60019150509392505050565b6109ff611b11565b610a07610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b9061303a565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f6012905090565b60115f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b11611b11565b610b19610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7d9061303a565b60405180910390fd5b5f610bb160105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610bdb600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c05600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c2f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c59600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c83600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b610c8d91906130df565b610c9791906130df565b610ca191906130df565b610cab91906130df565b610cb591906130df565b90505f81610cc1610741565b610ccb9190613112565b90505f610cf8600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b90505f82118015610d0857505f81115b15610e28575f80610d1761074a565b915091505f5b8251811015610ded575f828281518110610d3a57610d39613085565b5b602002602001015190505f811115610ddf575f868683610d5a9190613145565b610d6491906131b3565b905080610d91600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610e2d565b10610ddd57610ddc600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868581518110610dce57610dcd613085565b5b602002602001015183611c2a565b5b505b508080600101915050610d1d565b507f6d1c76d614228b523baa4dcd9539e2c713b54ff4ab3ff2d1627e7f6cd32be44283604051610e1d9190612c63565b60405180910390a150505b505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7a611b11565b610e835f611d1a565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060048054610ee190612f9a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f0d90612f9a565b8015610f585780601f10610f2f57610100808354040283529160200191610f58565b820191905f5260205f20905b815481529060010190602001808311610f3b57829003601f168201915b5050505050905090565b5f8111610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b90613253565b60405180910390fd5b8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610fff9190612e2e565b602060405180830381865afa15801561101a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103e9190613285565b101561107f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611076906132fa565b60405180910390fd5b8060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b81526004016110dc929190613318565b602060405180830381865afa1580156110f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061111b9190613285565b101561115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115390613389565b60405180910390fd5b5f64e8d4a510008261116e9190613145565b90505f60646008836111809190613145565b61118a91906131b3565b90505f81836111999190613112565b905060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330876040518463ffffffff1660e01b81526004016111f9939291906133a7565b6020604051808303815f875af1158015611215573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112399190613406565b5060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636e553f6585306040518363ffffffff1660e01b8152600401611296929190613431565b5f604051808303815f87803b1580156112ad575f80fd5b505af11580156112bf573d5f803e3d5ffd5b505050505f60646001856112d39190613145565b6112dd91906131b3565b90505f60646001866112ef9190613145565b6112f991906131b3565b90505f606460018761130b9190613145565b61131591906131b3565b90505f60646002886113279190613145565b61133191906131b3565b90505f6103e8600f896113449190613145565b61134e91906131b3565b90505f6103e8600f8a6113619190613145565b61136b91906131b3565b9050611398600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687611ddd565b6113c3600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686611ddd565b6113ee600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685611ddd565b611419600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611ddd565b611444600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611ddd565b61146f60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611ddd565b6114793388611ddd565b3373ffffffffffffffffffffffffffffffffffffffff167f8fafebcaf9d154343dad25669bfa277f4fbacd7ac6b0c4fed522580e040a0f338b896040516114c1929190613458565b60405180910390a250505050505050505050565b6114dd611b11565b6114e5610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611552576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115499061303a565b60405180910390fd5b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f806115c4611af8565b90506115d1818585611c2a565b600191505092915050565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611609611b11565b611611610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461167e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116759061303a565b60405180910390fd5b80600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116c9611b11565b6116d1610e85565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461173e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359061303a565b60405180910390fd5b80600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f811161186a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186190613253565b60405180910390fd5b5f64e8d4a510008261187c9190613145565b90508061188833610e2d565b10156118c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c0906134c9565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b460af948330306040518463ffffffff1660e01b8152600401611927939291906134e7565b5f604051808303815f87803b15801561193e575f80fd5b505af1158015611950573d5f803e3d5ffd5b5050505061195e3382611e5c565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016119ba92919061351c565b6020604051808303815f875af11580156119d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fa9190613406565b503373ffffffffffffffffffffffffffffffffffffffff167f2dcf9433d75db0d8b1c172641f85e319ffe4ad22e108a95d1847ceb906e5195d8284604051611a43929190613458565b60405180910390a25050565b611a57611b11565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ac7575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401611abe9190612e2e565b60405180910390fd5b611ad081611d1a565b50565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b611b0c8383836001611edb565b505050565b611b19611af8565b73ffffffffffffffffffffffffffffffffffffffff16611b37610e85565b73ffffffffffffffffffffffffffffffffffffffff1614611b9657611b5a611af8565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401611b8d9190612e2e565b60405180910390fd5b565b5f611ba384846117a6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611c245781811015611c15578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401611c0c93929190613543565b60405180910390fd5b611c2384848484035f611edb565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611c9a575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611c919190612e2e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0a575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611d019190612e2e565b60405180910390fd5b611d158383836120aa565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e4d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611e449190612e2e565b60405180910390fd5b611e585f83836120aa565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ecc575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ec39190612e2e565b60405180910390fd5b611ed7825f836120aa565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f4b575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611f429190612e2e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fbb575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611fb29190612e2e565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156120a4578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161209b9190612c63565b60405180910390a35b50505050565b6120b5838383612165565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156120f757506120f58361237e565b155b1561210657612105836125f5565b5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561214857506121468261237e565b155b156121605761215f8261215a84610e2d565b61286b565b5b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121b5578060025f8282546121a991906130df565b92505081905550612283565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561223e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161223593929190613543565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122ca578060025f8282540392505081905550612314565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123719190612c63565b60405180910390a3505050565b5f806040518060c00160405280600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160105f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525090505f5b60068110156125ea5781816006811061259b5761259a613085565b5b602002015173ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036125dd576001925050506125f0565b808060010191505061257f565b505f9150505b919050565b5f6125ff82610e2d565b1480156126525750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612868575f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f5b600880549050811015612866578173ffffffffffffffffffffffffffffffffffffffff166008828154811061272757612726613085565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603612859576008600160088054905061277e9190613112565b8154811061278f5761278e613085565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106127cb576127ca613085565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600880548061282257612821613578565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612866565b80806001019150506126ef565b505b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090613615565b60405180910390fd5b600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166129dd576001600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600882908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612a6582612a23565b612a6f8185612a2d565b9350612a7f818560208601612a3d565b612a8881612a4b565b840191505092915050565b5f6020820190508181035f830152612aab8184612a5b565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612ae082612ab7565b9050919050565b612af081612ad6565b8114612afa575f80fd5b50565b5f81359050612b0b81612ae7565b92915050565b5f819050919050565b612b2381612b11565b8114612b2d575f80fd5b50565b5f81359050612b3e81612b1a565b92915050565b5f8060408385031215612b5a57612b59612ab3565b5b5f612b6785828601612afd565b9250506020612b7885828601612b30565b9150509250929050565b5f8115159050919050565b612b9681612b82565b82525050565b5f602082019050612baf5f830184612b8d565b92915050565b5f819050919050565b5f612bd8612bd3612bce84612ab7565b612bb5565b612ab7565b9050919050565b5f612be982612bbe565b9050919050565b5f612bfa82612bdf565b9050919050565b612c0a81612bf0565b82525050565b5f602082019050612c235f830184612c01565b92915050565b5f60208284031215612c3e57612c3d612ab3565b5b5f612c4b84828501612afd565b91505092915050565b612c5d81612b11565b82525050565b5f602082019050612c765f830184612c54565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612cae81612ad6565b82525050565b5f612cbf8383612ca5565b60208301905092915050565b5f602082019050919050565b5f612ce182612c7c565b612ceb8185612c86565b9350612cf683612c96565b805f5b83811015612d26578151612d0d8882612cb4565b9750612d1883612ccb565b925050600181019050612cf9565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d6581612b11565b82525050565b5f612d768383612d5c565b60208301905092915050565b5f602082019050919050565b5f612d9882612d33565b612da28185612d3d565b9350612dad83612d4d565b805f5b83811015612ddd578151612dc48882612d6b565b9750612dcf83612d82565b925050600181019050612db0565b5085935050505092915050565b5f6040820190508181035f830152612e028185612cd7565b90508181036020830152612e168184612d8e565b90509392505050565b612e2881612ad6565b82525050565b5f602082019050612e415f830184612e1f565b92915050565b5f805f60608486031215612e5e57612e5d612ab3565b5b5f612e6b86828701612afd565b9350506020612e7c86828701612afd565b9250506040612e8d86828701612b30565b9150509250925092565b5f60ff82169050919050565b612eac81612e97565b82525050565b5f602082019050612ec55f830184612ea3565b92915050565b5f60208284031215612ee057612edf612ab3565b5b5f612eed84828501612b30565b91505092915050565b5f8060408385031215612f0c57612f0b612ab3565b5b5f612f1985828601612afd565b9250506020612f2a85828601612afd565b9150509250929050565b5f612f3e82612bdf565b9050919050565b612f4e81612f34565b82525050565b5f602082019050612f675f830184612f45565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612fb157607f821691505b602082108103612fc457612fc3612f6d565b5b50919050565b7f4f6e6c79206f776e65722063616e2064697374726962757465207265776172645f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613024602183612a2d565b915061302f82612fca565b604082019050919050565b5f6020820190508181035f83015261305181613018565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6130e982612b11565b91506130f483612b11565b925082820190508082111561310c5761310b6130b2565b5b92915050565b5f61311c82612b11565b915061312783612b11565b925082820390508181111561313f5761313e6130b2565b5b92915050565b5f61314f82612b11565b915061315a83612b11565b925082820261316881612b11565b9150828204841483151761317f5761317e6130b2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131bd82612b11565b91506131c883612b11565b9250826131d8576131d7613186565b5b828204905092915050565b7f5553444320616d6f756e74206d7573742062652067726561746572207468616e5f8201527f2030000000000000000000000000000000000000000000000000000000000000602082015250565b5f61323d602283612a2d565b9150613248826131e3565b604082019050919050565b5f6020820190508181035f83015261326a81613231565b9050919050565b5f8151905061327f81612b1a565b92915050565b5f6020828403121561329a57613299612ab3565b5b5f6132a784828501613271565b91505092915050565b7f496e73756666696369656e7420555344432062616c616e6365000000000000005f82015250565b5f6132e4601983612a2d565b91506132ef826132b0565b602082019050919050565b5f6020820190508181035f830152613311816132d8565b9050919050565b5f60408201905061332b5f830185612e1f565b6133386020830184612e1f565b9392505050565b7f496e73756666696369656e74205553444320616c6c6f77616e636500000000005f82015250565b5f613373601b83612a2d565b915061337e8261333f565b602082019050919050565b5f6020820190508181035f8301526133a081613367565b9050919050565b5f6060820190506133ba5f830186612e1f565b6133c76020830185612e1f565b6133d46040830184612c54565b949350505050565b6133e581612b82565b81146133ef575f80fd5b50565b5f81519050613400816133dc565b92915050565b5f6020828403121561341b5761341a612ab3565b5b5f613428848285016133f2565b91505092915050565b5f6040820190506134445f830185612c54565b6134516020830184612e1f565b9392505050565b5f60408201905061346b5f830185612c54565b6134786020830184612c54565b9392505050565b7f496e73756666696369656e74205441442062616c616e636500000000000000005f82015250565b5f6134b3601883612a2d565b91506134be8261347f565b602082019050919050565b5f6020820190508181035f8301526134e0816134a7565b9050919050565b5f6060820190506134fa5f830186612c54565b6135076020830185612e1f565b6135146040830184612e1f565b949350505050565b5f60408201905061352f5f830185612e1f565b61353c6020830184612c54565b9392505050565b5f6060820190506135565f830186612e1f565b6135636020830185612c54565b6135706040830184612c54565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4163636f756e7420616464726573732063616e6e6f7420626520746865207a655f8201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b5f6135ff602a83612a2d565b915061360a826135a5565b604082019050919050565b5f6020820190508181035f83015261362c816135f3565b905091905056fea2646970667358221220ffb2aa72da23b4bb781e54c1d1fb8fb4fa8d40b7e37520ee62f5694ab44c4f1464736f6c634300081a0033000000000000000000000000f2f3f13c36cd355162bee7c5416b227bf1c2ea5c00000000000000000000000041e94eb019c0762f9bfcf9fb1e58725bfb0e7582000000000000000000000000afb769a5160e30206113372d3cb2ccba6750f7fa00000000000000000000000048ea93ee4ff79bcce024fccd8b5ea2bb92b584dc000000000000000000000000afa76384d13f344fe902c1216f6fa4d09ab9038e000000000000000000000000f1174883d7aaaf825f387bf6ffe7d8041e526415000000000000000000000000d76dfccbddbb6de6d21264e5afb995b21e1dab25000000000000000000000000f5cea7987fd1e4580eaaac5cc5b8fa2f99f7458f0000000000000000000000002ab7fd40081f71e9530ec765cc6e0fa9cb5f3084