60806040523480156200001157600080fd5b5033604051806040016040528060128152602001712232bb31b7b7102b249029b7babb32b734b960711b81525060405180604001604052806008815260200167444556434f4e564960c01b81525081600090816200007091906200020d565b5060016200007f82826200020d565b5050506200009c62000096620000c060201b60201c565b620000c4565b620000a78162000116565b50620000b74262278d00620002d9565b600e5562000300565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f440b22f2c347b1fb7b850f182e7defb88ed393ebeb024d7b5e519d230c71e8f190600090a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019357607f821691505b602082108103620001b457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020857600081815260208120601f850160051c81016020861015620001e35750805b601f850160051c820191505b818110156200020457828155600101620001ef565b5050505b505050565b81516001600160401b0381111562000229576200022962000168565b62000241816200023a84546200017e565b84620001ba565b602080601f831160018114620002795760008415620002605750858301515b600019600386901b1c1916600185901b17855562000204565b600085815260208120601f198616915b82811015620002aa5788860151825594840194600190910190840162000289565b5085821015620002c95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60008219821115620002fb57634e487b7160e01b600052601160045260246000fd5b500190565b612a7f80620003106000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806370a0823111610130578063b5c8fd62116100b8578063e3d61eb31161007c578063e3d61eb3146104bc578063e8a3d485146104cf578063e985e9c5146104d7578063eb20614e14610513578063f2fde38b1461052657600080fd5b8063b5c8fd6214610483578063b88d4fde14610496578063c87b56dd146104a9578063e02532c8146103ed578063e21392001461047057600080fd5b806395d89b41116100ff57806395d89b41146104115780639763d62614610419578063a22cb4651461042c578063a7bb58031461043f578063b08000031461047057600080fd5b806370a08231146103d2578063715018a6146103e55780637c7c644e146103ed5780638da5cb5b1461040057600080fd5b80632f4ea5ea116101be5780634bb30912116101825780634bb30912146103715780634f6ccce71461038657806355f804b3146103995780635b6beeb9146103ac5780636352211e146103bf57600080fd5b80632f4ea5ea146103125780632f745c591461032557806340c10f191461033857806342842e0e1461034b57806342966c681461035e57600080fd5b8063095ea7b311610205578063095ea7b3146102b25780630a9d3ee6146102c757806318160ddd146102da57806323b872dd146102ec578063258ae582146102ff57600080fd5b806301ffc9a714610237578063057aee2b1461025f57806306fdde031461028a578063081812fc1461029f575b600080fd5b61024a610245366004611f02565b610539565b60405190151581526020015b60405180910390f35b61027261026d366004611fd4565b610559565b6040516001600160a01b039091168152602001610256565b610292610597565b604051610256919061208f565b6102726102ad3660046120a2565b610629565b6102c56102c03660046120d7565b610650565b005b6102c56102d5366004612101565b61076a565b6008545b604051908152602001610256565b6102c56102fa36600461211c565b6107d4565b61027261030d366004612158565b610806565b6102de6103203660046120a2565b610885565b6102de6103333660046120d7565b6108d9565b6102c56103463660046120d7565b61096f565b6102c561035936600461211c565b610a12565b6102c561036c3660046120a2565b610a2d565b610379610a5b565b6040516102569190612194565b6102de6103943660046120a2565b610b34565b6102c56103a736600461223e565b610bc7565b6102de6103ba36600461227f565b610bfe565b6102726103cd3660046120a2565b610c11565b6102de6103e0366004612101565b610c71565b6102c5610cf7565b6102de6103fb36600461227f565b610d0b565b600a546001600160a01b0316610272565b610292610d21565b6102c56104273660046122b3565b610d30565b6102c561043a3660046122fe565b610e87565b61045261044d36600461227f565b610e96565b60408051938452602084019290925260ff1690820152606001610256565b61027261047e366004611fd4565b610f0a565b610272610491366004612158565b610f25565b6102c56104a436600461233a565b610f33565b6102926104b73660046120a2565b610f65565b6102c56104ca3660046123a1565b611002565b610292611059565b61024a6104e5366004612463565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6102c56105213660046120a2565b611098565b6102c5610534366004612101565b6110a5565b60006105448261111b565b8061055357506105538261111b565b92915050565b6000808360405160200161056d9190612496565b60405160208183030381529060405280519060200120905061058f8184610806565b949350505050565b6060600080546105a6906124b2565b80601f01602080910402602001604051908101604052809291908181526020018280546105d2906124b2565b801561061f5780601f106105f45761010080835404028352916020019161061f565b820191906000526020600020905b81548152906001019060200180831161060257829003601f168201915b5050505050905090565b600061063482611131565b506000908152600460205260409020546001600160a01b031690565b600061065b82610c11565b9050806001600160a01b0316836001600160a01b0316036106cd5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b03821614806106e957506106e981336104e5565b61075b5760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016106c4565b6107658383611190565b505050565b6107726111fe565b6001600160a01b0381166107c85760405162461bcd60e51b815260206004820152601c60248201527f5572694368616e6765723a20416464726573732072657175697265640000000060448201526064016106c4565b6107d181611258565b50565b6107df335b826112aa565b6107fb5760405162461bcd60e51b81526004016106c4906124e6565b610765838383611328565b60008060008061081585610e96565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015610870573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c015b604051602081830303815290604052805190602001209050919050565b60006108e483610c71565b82106109465760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b60648201526084016106c4565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600b546001600160a01b031633146109995760405162461bcd60e51b81526004016106c490612534565b600e5442106109dd5760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016106c4565b60405162461bcd60e51b815260206004820152600a60248201526911195c1c9958d85d195960b21b60448201526064016106c4565b61076583838360405180602001604052806000815250610f33565b610a36336107d9565b610a525760405162461bcd60e51b81526004016106c4906124e6565b6107d1816114cf565b6060600c805480602002602001604051908101604052809291908181526020016000905b82821015610b2b578382906000526020600020018054610a9e906124b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca906124b2565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b505050505081526020019060010190610a7f565b50505050905090565b6000610b3f60085490565b8210610ba25760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b60648201526084016106c4565b60088281548110610bb557610bb5612575565b90600052602060002001549050919050565b600b546001600160a01b03163314610bf15760405162461bcd60e51b81526004016106c490612534565b600d6107658284836125d9565b6000816040516020016108bc9190612496565b6000818152600260205260408120546001600160a01b0316806105535760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c4565b60006001600160a01b038216610cdb5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016106c4565b506001600160a01b031660009081526003602052604090205490565b610cff6111fe565b610d096000611576565b565b60008151826040516020016108bc929190612699565b6060600180546105a6906124b2565b600e544210610d745760405162461bcd60e51b815260206004820152601060248201526f135a5b9d1a5b99c8199a5b9a5cda195960821b60448201526064016106c4565b6040516bffffffffffffffffffffffff1930606090811b8216602084015233901b166034820152466048820152606881018490526000906088016040516020818303038152906040529050610dd1600b546001600160a01b031690565b6001600160a01b0316610e21828051906020012085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610f2592505050565b6001600160a01b031614610e775760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420616c6c6f77656420746f20746869732072657175657374000000000060448201526064016106c4565b610e8133856115c8565b50505050565b610e92338383611716565b5050565b60008060008351604114610eec5760405162461bcd60e51b815260206004820152601860248201527f696e76616c6964207369676e6174757265206c656e677468000000000000000060448201526064016106c4565b50505060208101516040820151606090920151909260009190911a90565b6000610f1e610f1884610d0b565b83610806565b9392505050565b6000610f1e610f1884610885565b610f3d33836112aa565b610f595760405162461bcd60e51b81526004016106c4906124e6565b610e81848484846117e4565b6060610f7082611131565b6000610f7a611817565b805190915015610fb65780610f8e84611826565b604051602001610f9f9291906126e5565b604051602081830303815290604052915050919050565b604051806060016040528060258152602001612a2560259139610fd846611826565b610fe0611926565b610fe986611826565b604051602001610f9f9493929190612721565b50919050565b61100b81611938565b805161101e90600c906020840190611e2f565b507f9538911740e5519a40db77fb5f637de0d56cdd804318d81ae270cc24fbd8479e8160405161104e9190612194565b60405180910390a150565b6060604051806060016040528060258152602001612a25602591396040516020016110849190612790565b604051602081830303815290604052905090565b6110a06111fe565b600e55565b6110ad6111fe565b6001600160a01b0381166111125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106c4565b6107d181611576565b6001600160e01b03191663a86517a160e01b1490565b6000818152600260205260409020546001600160a01b03166107d15760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016106c4565b600081815260046020526040902080546001600160a01b0319166001600160a01b03841690811790915581906111c582610c11565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600a546001600160a01b03163314610d095760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106c4565b600b80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f440b22f2c347b1fb7b850f182e7defb88ed393ebeb024d7b5e519d230c71e8f190600090a35050565b6000806112b683610c11565b9050806001600160a01b0316846001600160a01b031614806112fd57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b8061058f5750836001600160a01b031661131684610629565b6001600160a01b031614949350505050565b826001600160a01b031661133b82610c11565b6001600160a01b03161461139f5760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016106c4565b6001600160a01b0382166114015760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106c4565b61140c838383611940565b611417600082611190565b6001600160a01b03831660009081526003602052604081208054600192906114409084906127e7565b90915550506001600160a01b038216600090815260036020526040812080546001929061146e9084906127fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006114da82610c11565b90506114e881600084611940565b6114f3600083611190565b6001600160a01b038116600090815260036020526040812080546001929061151c9084906127e7565b909155505060008281526002602052604080822080546001600160a01b0319169055518391906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821661161e5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106c4565b6000818152600260205260409020546001600160a01b0316156116835760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106c4565b61168f60008383611940565b6001600160a01b03821660009081526003602052604081208054600192906116b89084906127fe565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b816001600160a01b0316836001600160a01b0316036117775760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106c4565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6117ef848484611328565b6117fb8484848461194b565b610e815760405162461bcd60e51b81526004016106c490612816565b6060600d80546105a6906124b2565b60608160000361184d5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611877578061186181612868565b91506118709050600a83612897565b9150611851565b6000816001600160401b0381111561189157611891611f1f565b6040519080825280601f01601f1916602001820160405280156118bb576020820181803683370190505b5090505b841561058f576118d06001836127e7565b91506118dd600a866128ab565b6118e89060306127fe565b60f81b8183815181106118fd576118fd612575565b60200101906001600160f81b031916908160001a90535061191f600a86612897565b94506118bf565b6060611933306014611a4c565b905090565b6107d16111fe565b610765838383611be7565b60006001600160a01b0384163b15611a4157604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061198f9033908990889088906004016128bf565b6020604051808303816000875af19250505080156119ca575060408051601f3d908101601f191682019092526119c7918101906128fc565b60015b611a27573d8080156119f8576040519150601f19603f3d011682016040523d82523d6000602084013e6119fd565b606091505b508051600003611a1f5760405162461bcd60e51b81526004016106c490612816565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061058f565b506001949350505050565b60606000611a5b836002612919565b611a669060026127fe565b6001600160401b03811115611a7d57611a7d611f1f565b6040519080825280601f01601f191660200182016040528015611aa7576020820181803683370190505b509050600360fc1b81600081518110611ac257611ac2612575565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611af157611af1612575565b60200101906001600160f81b031916908160001a9053506000611b15846002612919565b611b209060016127fe565b90505b6001811115611b98576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611b5457611b54612575565b1a60f81b828281518110611b6a57611b6a612575565b60200101906001600160f81b031916908160001a90535060049490941c93611b9181612938565b9050611b23565b508315610f1e5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016106c4565b6001600160a01b038316611c4257611c3d81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b611c65565b816001600160a01b0316836001600160a01b031614611c6557611c658382611c9f565b6001600160a01b038216611c7c5761076581611d3c565b826001600160a01b0316826001600160a01b031614610765576107658282611deb565b60006001611cac84610c71565b611cb691906127e7565b600083815260076020526040902054909150808214611d09576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090611d4e906001906127e7565b60008381526009602052604081205460088054939450909284908110611d7657611d76612575565b906000526020600020015490508060088381548110611d9757611d97612575565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480611dcf57611dcf61294f565b6001900381819060005260206000200160009055905550505050565b6000611df683610c71565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054828255906000526020600020908101928215611e75579160200282015b82811115611e755782518290611e659082612965565b5091602001919060010190611e4f565b50611e81929150611e85565b5090565b80821115611e81576000611e998282611ea2565b50600101611e85565b508054611eae906124b2565b6000825580601f10611ebe575050565b601f0160209004906000526020600020908101906107d191905b80821115611e815760008155600101611ed8565b6001600160e01b0319811681146107d157600080fd5b600060208284031215611f1457600080fd5b8135610f1e81611eec565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611f5d57611f5d611f1f565b604052919050565b600082601f830112611f7657600080fd5b81356001600160401b03811115611f8f57611f8f611f1f565b611fa2601f8201601f1916602001611f35565b818152846020838601011115611fb757600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215611fe757600080fd5b82356001600160401b0380821115611ffe57600080fd5b61200a86838701611f65565b9350602085013591508082111561202057600080fd5b5061202d85828601611f65565b9150509250929050565b60005b8381101561205257818101518382015260200161203a565b83811115610e815750506000910152565b6000815180845261207b816020860160208601612037565b601f01601f19169290920160200192915050565b602081526000610f1e6020830184612063565b6000602082840312156120b457600080fd5b5035919050565b80356001600160a01b03811681146120d257600080fd5b919050565b600080604083850312156120ea57600080fd5b6120f3836120bb565b946020939093013593505050565b60006020828403121561211357600080fd5b610f1e826120bb565b60008060006060848603121561213157600080fd5b61213a846120bb565b9250612148602085016120bb565b9150604084013590509250925092565b6000806040838503121561216b57600080fd5b8235915060208301356001600160401b0381111561218857600080fd5b61202d85828601611f65565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156121e957603f198886030184526121d7858351612063565b945092850192908501906001016121bb565b5092979650505050505050565b60008083601f84011261220857600080fd5b5081356001600160401b0381111561221f57600080fd5b60208301915083602082850101111561223757600080fd5b9250929050565b6000806020838503121561225157600080fd5b82356001600160401b0381111561226757600080fd5b612273858286016121f6565b90969095509350505050565b60006020828403121561229157600080fd5b81356001600160401b038111156122a757600080fd5b61058f84828501611f65565b6000806000604084860312156122c857600080fd5b8335925060208401356001600160401b038111156122e557600080fd5b6122f1868287016121f6565b9497909650939450505050565b6000806040838503121561231157600080fd5b61231a836120bb565b91506020830135801515811461232f57600080fd5b809150509250929050565b6000806000806080858703121561235057600080fd5b612359856120bb565b9350612367602086016120bb565b92506040850135915060608501356001600160401b0381111561238957600080fd5b61239587828801611f65565b91505092959194509250565b600060208083850312156123b457600080fd5b82356001600160401b03808211156123cb57600080fd5b818501915085601f8301126123df57600080fd5b8135818111156123f1576123f1611f1f565b8060051b612400858201611f35565b918252838101850191858101908984111561241a57600080fd5b86860192505b83831015612456578235858111156124385760008081fd5b6124468b89838a0101611f65565b8352509186019190860190612420565b9998505050505050505050565b6000806040838503121561247657600080fd5b61247f836120bb565b915061248d602084016120bb565b90509250929050565b600082516124a8818460208701612037565b9190910192915050565b600181811c908216806124c657607f821691505b602082108103610ffc57634e487b7160e01b600052602260045260246000fd5b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60208082526021908201527f5572694368616e6765723a2063616c6c6572206973206e6f7420616c6c6f77656040820152601960fa1b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b601f82111561076557600081815260208120601f850160051c810160208610156125b25750805b601f850160051c820191505b818110156125d1578281556001016125be565b505050505050565b6001600160401b038311156125f0576125f0611f1f565b612604836125fe83546124b2565b8361258b565b6000601f84116001811461263857600085156126205750838201355b600019600387901b1c1916600186901b178355612692565b600083815260209020601f19861690835b828110156126695786850135825560209485019460019092019101612649565b50868210156126865760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b7f19457468657265756d205369676e6564204d6573736167653a0a000000000000815282601a820152600082516126d781603a850160208701612037565b91909101603a019392505050565b600083516126f7818460208801612037565b602f60f81b9083019081528351612715816001840160208801612037565b01600101949350505050565b60008551612733818460208a01612037565b855190830190612747818360208a01612037565b602f60f81b91018181528551909190612767816001850160208a01612037565b60019201918201528351612782816002840160208801612037565b016002019695505050505050565b600082516127a2818460208701612037565b7f636f6e74726163742f646576636f6e365f736f7576656e69722e6a736f6e0000920191825250601e01919050565b634e487b7160e01b600052601160045260246000fd5b6000828210156127f9576127f96127d1565b500390565b60008219821115612811576128116127d1565b500190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b60006001820161287a5761287a6127d1565b5060010190565b634e487b7160e01b600052601260045260246000fd5b6000826128a6576128a6612881565b500490565b6000826128ba576128ba612881565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906128f290830184612063565b9695505050505050565b60006020828403121561290e57600080fd5b8151610f1e81611eec565b6000816000190483118215151615612933576129336127d1565b500290565b600081612947576129476127d1565b506000190190565b634e487b7160e01b600052603160045260246000fd5b81516001600160401b0381111561297e5761297e611f1f565b6129928161298c84546124b2565b8461258b565b602080601f8311600181146129c757600084156129af5750858301515b600019600386901b1c1916600185901b1785556125d1565b600085815260208120601f198616915b828110156129f6578886015182559484019460019091019084016129d7565b5085821015612a145787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fe68747470733a2f2f7265736f75726365732e736d617274746f6b656e6c6162732e636f6d2fa26469706673582212202d79bcec3f0372fe715b8e94d51b1c610b3b449deeefe65885a845429b30b9f564736f6c634300080f0033