0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b4b5ea571161007c578063b4b5ea5714610368578063c3cda5201461037b578063d505accf1461038e578063dd62ed3e146103a1578063e6ff41eb146103cc578063f1127ed8146103df57600080fd5b806370a08231146102bf578063782d6fe1146102df5780637ecebe00146102f257806395d89b4114610312578063a9059cbb14610335578063ac9650d81461034857600080fd5b8063313ce56711610115578063313ce567146101ee5780633c0adb6814610208578063587cde1e1461021b5780635c19a95c1461025c578063642ed500146102715780636fcfff451461028457600080fd5b806306fdde0314610152578063095ea7b31461018e57806318160ddd146101b15780631b04a34f146101c857806323b872dd146101db575b600080fd5b610178604051806040016040528060078152602001664d656f7773686960c81b81525081565b6040516101859190611f49565b60405180910390f35b6101a161019c366004611c46565b610436565b6040519015158152602001610185565b6101ba60005481565b604051908152602001610185565b6101ba6101d6366004611c46565b6104a3565b6101a16101e9366004611ba2565b610560565b6101f6601281565b60405160ff9091168152602001610185565b6101ba610216366004611c46565b61067c565b610244610229366004611b56565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610185565b61026f61026a366004611b56565b6108a7565b005b6101ba61027f366004611c46565b6108b4565b6102aa610292366004611b56565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610185565b6101ba6102cd366004611b56565b60026020526000908152604090205481565b6101ba6102ed366004611c46565b610ae3565b6101ba610300366004611b56565b60036020526000908152604090205481565b610178604051806040016040528060048152602001634d454f5760e01b81525081565b6101a1610343366004611c46565b610d0f565b61035b610356366004611d04565b610da3565b6040516101859190611eb4565b6101ba610376366004611b56565b610f13565b61026f610389366004611c6f565b610f77565b61026f61039c366004611bdd565b611264565b6101ba6103af366004611b70565b600160209081526000928352604080842090915290825290205481565b6101ba6103da366004611c46565b61159e565b61041a6103ed366004611cc6565b60056020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610185565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104919086815260200190565b60405180910390a35060015b92915050565b60006104ae8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061050790738798249c2e607446efb7ad49ec89dd1865ff42729030908890600090620186a08a0490600401611f15565b6040805180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105589190611e55565b509392505050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019146105c5576001600160a01b0384166000908152600160209081526040808320338452909152812080548492906105bf908490611fdf565b90915550505b6001600160a01b038416600090815260026020526040812080548492906105ed908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055888516835260049091528082205492825290205461063792918216911684611713565b826001600160a01b0316846001600160a01b031660008051602061204f8339815191528460405161066a91815260200190565b60405180910390a35060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090736b3595068778dd592e39a122f4f5a5cf09c90fe2906323b872dd90606401602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611d74565b50604051632967cf8360e21b815260048101839052738798249c2e607446efb7ad49ec89dd1865ff42729063a59f3e0c90602401600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820181905273f5bce5077908a1b7370b9ae04adc565ebd64396693506302b9446c9250738798249c2e607446efb7ad49ec89dd1865ff427291819083906370a082319060240160206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611e3d565b60006040518663ffffffff1660e01b815260040161083c959493929190611f15565b6040805180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190611e55565b915061049d9050836108a2620186a084611fc0565b61183f565b6108b133826118dc565b50565b60006108bf8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061091890738798249c2e607446efb7ad49ec89dd1865ff42729030908190600090620186a08a0490600401611f15565b6040805180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190611e55565b506040516367dfd4c960e01b815260048101829052909150738798249c2e607446efb7ad49ec89dd1865ff4272906367dfd4c990602401600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152736b3595068778dd592e39a122f4f5a5cf09c90fe2925063a9059cbb9150859083906370a082319060240160206040518083038186803b158015610a2657600080fd5b505afa158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611d74565b5092915050565b6000438210610b4c5760405162461bcd60e51b815260206004820152602a60248201527f4d656f777368693a3a6765745072696f72566f7465733a206e6f74207965742060448201526919195d195c9b5a5b995960b21b60648201526084015b60405180910390fd5b6001600160a01b03831660009081526006602052604090205463ffffffff1680610b7a57600091505061049d565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610be9576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522060010154905061049d565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610c2457600091505061049d565b600060001982015b8163ffffffff168163ffffffff161115610cd8576000600263ffffffff848403166001600160a01b038916600090815260056020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610cb35760200151945061049d9350505050565b805163ffffffff16871115610cca57819350610cd1565b6001820392505b5050610c2c565b506001600160a01b038516600090815260056020908152604080832063ffffffff9094168352929052206001015491505092915050565b33600090815260026020526040812080548391908390610d30908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055338352600490915280822054928252902054610d7892918216911684611713565b6040518281526001600160a01b03841690339060008051602061204f83398151915290602001610491565b60608167ffffffffffffffff811115610dcc57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dff57816020015b6060815260200190600190039081610dea5790505b50905060005b82811015610adc5760008030868685818110610e3157634e487b7160e01b600052603260045260246000fd5b9050602002810190610e439190611f5c565b604051610e51929190611ea4565b600060405180830381855af49150503d8060008114610e8c576040519150601f19603f3d011682016040523d82523d6000602084013e610e91565b606091505b509150915081610edd57604481511015610eaa57600080fd5b60048101905080806020019051810190610ec49190611d94565b60405162461bcd60e51b8152600401610b439190611f49565b80848481518110610efe57634e487b7160e01b600052603260045260246000fd5b60209081029190910101525050600101610e05565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610f3e576000610f70565b6001600160a01b038316600090815260056020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110f9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661116e5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152687369676e617475726560b81b6064820152608401610b43565b6001600160a01b038116600090815260036020526040902080546001810190915589146111eb5760405162461bcd60e51b815260206004820152602560248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152646e6f6e636560d81b6064820152608401610b43565b8742111561124d5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a207369676e617475726044820152681948195e1c1a5c995960ba1b6064820152608401610b43565b611257818b6118dc565b505050505b505050505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301206001600160a01b038b81166000818152600386528681208054600181019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c087015260e0860192909252918c1661010085015261012084018b90526101408401526101608084018a90528551808503909101815261018084019095528451949093019390932061190160f01b6101a08301526101a282018490526101c2820181905291906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561140b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114795760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a20696e76616c6964207369676e617475604482015261726560f01b6064820152608401610b43565b8a6001600160a01b0316816001600160a01b0316146114da5760405162461bcd60e51b815260206004820152601d60248201527f4d656f777368693a3a7065726d69743a20756e617574686f72697a65640000006044820152606401610b43565b505050844211156115385760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a207369676e6174757265206578706972604482015261195960f21b6064820152608401610b43565b6001600160a01b038881166000818152600160209081526040808320948c16808452948252918290208a905590518981527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6040516323b872dd60e01b815233600482015273f5bce5077908a1b7370b9ae04adc565ebd643966602482015260448101829052600090738798249c2e607446efb7ad49ec89dd1865ff4272906323b872dd90606401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611d74565b5060405162ae511b60e21b815273f5bce5077908a1b7370b9ae04adc565ebd643966906302b9446c9061083c90738798249c2e607446efb7ad49ec89dd1865ff427290849030908890600090600401611f15565b33600090815260026020526040812080548392906116b9908490611fdf565b9091555050600080548290038155338152600460205260408120546116ea916001600160a01b039091169083611713565b604051818152600090339060008051602061204f8339815191529060200160405180910390a350565b816001600160a01b0316836001600160a01b0316141580156117355750600081115b1561183a576001600160a01b038316156117bc576001600160a01b03831660009081526006602052604081205463ffffffff1690816117755760006117a7565b6001600160a01b038516600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b90508281036117b88684848461195c565b5050505b6001600160a01b0382161561183a576001600160a01b03821660009081526006602052604081205463ffffffff1690816117f7576000611829565b6001600160a01b038416600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b905082810161125c8584848461195c565b505050565b6001600160a01b03821660009081526002602052604081208054839290611867908490611fa8565b925050819055508060008082825461187f9190611fa8565b90915550506001600160a01b038083166000908152600460205260408120546118a9921683611713565b6040518181526001600160a01b0383169060009060008051602061204f8339815191529060200160405180910390a35050565b6001600160a01b03808316600081815260046020818152604080842080546002845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611956828483611713565b50505050565b600061196743611aa9565b905060008463ffffffff161180156119b057506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156119ed576001600160a01b038516600090815260056020908152604080832063ffffffff60001989011684529091529020600101829055611a5e565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600584528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260069092529390208054928801909116919092161790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006401000000008210611b255760405162461bcd60e51b815260206004820152603760248201527f4d656f777368693a3a5f7772697465436865636b706f696e743a20626c6f636b60448201527f206e756d626572206578636565647320333220626974730000000000000000006064820152608401610b43565b5090565b80356001600160a01b0381168114611b4057600080fd5b919050565b803560ff81168114611b4057600080fd5b600060208284031215611b67578081fd5b610f7082611b29565b60008060408385031215611b82578081fd5b611b8b83611b29565b9150611b9960208401611b29565b90509250929050565b600080600060608486031215611bb6578081fd5b611bbf84611b29565b9250611bcd60208501611b29565b9150604084013590509250925092565b600080600080600080600060e0888a031215611bf7578283fd5b611c0088611b29565b9650611c0e60208901611b29565b95506040880135945060608801359350611c2a60808901611b45565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611c58578182fd5b611c6183611b29565b946020939093013593505050565b60008060008060008060c08789031215611c87578182fd5b611c9087611b29565b95506020870135945060408701359350611cac60608801611b45565b92506080870135915060a087013590509295509295509295565b60008060408385031215611cd8578182fd5b611ce183611b29565b9150602083013563ffffffff81168114611cf9578182fd5b809150509250929050565b60008060208385031215611d16578182fd5b823567ffffffffffffffff80821115611d2d578384fd5b818501915085601f830112611d40578384fd5b813581811115611d4e578485fd5b8660208260051b8501011115611d62578485fd5b60209290920196919550909350505050565b600060208284031215611d85578081fd5b81518015158114610f70578182fd5b600060208284031215611da5578081fd5b815167ffffffffffffffff80821115611dbc578283fd5b818401915084601f830112611dcf578283fd5b815181811115611de157611de1612038565b604051601f8201601f19908116603f01168101908382118183101715611e0957611e09612038565b81604052828152876020848701011115611e21578586fd5b611e32836020830160208801611ff6565b979650505050505050565b600060208284031215611e4e578081fd5b5051919050565b60008060408385031215611e67578182fd5b505080516020909101519092909150565b60008151808452611e90816020860160208601611ff6565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015611f0857603f19888603018452611ef6858351611e78565b94509285019290850190600101611eda565b5092979650505050505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b602081526000610f706020830184611e78565b6000808335601e19843603018112611f72578283fd5b83018035915067ffffffffffffffff821115611f8c578283fd5b602001915036819003821315611fa157600080fd5b9250929050565b60008219821115611fbb57611fbb612022565b500190565b6000816000190483118215151615611fda57611fda612022565b500290565b600082821015611ff157611ff1612022565b500390565b60005b83811015612011578181015183820152602001611ff9565b838111156119565750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122035b0fe5adbdae498498519145e816863e43ce263ac09956b745a7b88ea999a1f64736f6c63430008040033
0x60806040523480156200001157600080fd5b5060405163095ea7b360e01b8152738798249c2e607446efb7ad49ec89dd1865ff427260048201526000196024820152736b3595068778dd592e39a122f4f5a5cf09c90fe29063095ea7b390604401602060405180830381600087803b1580156200007b57600080fd5b505af115801562000090573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b6919062000162565b5060405163095ea7b360e01b815273f5bce5077908a1b7370b9ae04adc565ebd64396660048201526000196024820152738798249c2e607446efb7ad49ec89dd1865ff42729063095ea7b390604401602060405180830381600087803b1580156200012057600080fd5b505af115801562000135573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200015b919062000162565b506200018b565b60006020828403121562000174578081fd5b8151801515811462000184578182fd5b9392505050565b6120a4806200019b6000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806370a08231116100c3578063b4b5ea571161007c578063b4b5ea5714610368578063c3cda5201461037b578063d505accf1461038e578063dd62ed3e146103a1578063e6ff41eb146103cc578063f1127ed8146103df57600080fd5b806370a08231146102bf578063782d6fe1146102df5780637ecebe00146102f257806395d89b4114610312578063a9059cbb14610335578063ac9650d81461034857600080fd5b8063313ce56711610115578063313ce567146101ee5780633c0adb6814610208578063587cde1e1461021b5780635c19a95c1461025c578063642ed500146102715780636fcfff451461028457600080fd5b806306fdde0314610152578063095ea7b31461018e57806318160ddd146101b15780631b04a34f146101c857806323b872dd146101db575b600080fd5b610178604051806040016040528060078152602001664d656f7773686960c81b81525081565b6040516101859190611f49565b60405180910390f35b6101a161019c366004611c46565b610436565b6040519015158152602001610185565b6101ba60005481565b604051908152602001610185565b6101ba6101d6366004611c46565b6104a3565b6101a16101e9366004611ba2565b610560565b6101f6601281565b60405160ff9091168152602001610185565b6101ba610216366004611c46565b61067c565b610244610229366004611b56565b6004602052600090815260409020546001600160a01b031681565b6040516001600160a01b039091168152602001610185565b61026f61026a366004611b56565b6108a7565b005b6101ba61027f366004611c46565b6108b4565b6102aa610292366004611b56565b60066020526000908152604090205463ffffffff1681565b60405163ffffffff9091168152602001610185565b6101ba6102cd366004611b56565b60026020526000908152604090205481565b6101ba6102ed366004611c46565b610ae3565b6101ba610300366004611b56565b60036020526000908152604090205481565b610178604051806040016040528060048152602001634d454f5760e01b81525081565b6101a1610343366004611c46565b610d0f565b61035b610356366004611d04565b610da3565b6040516101859190611eb4565b6101ba610376366004611b56565b610f13565b61026f610389366004611c6f565b610f77565b61026f61039c366004611bdd565b611264565b6101ba6103af366004611b70565b600160209081526000928352604080842090915290825290205481565b6101ba6103da366004611c46565b61159e565b61041a6103ed366004611cc6565b60056020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b6040805163ffffffff9093168352602083019190915201610185565b3360008181526001602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104919086815260200190565b60405180910390a35060015b92915050565b60006104ae8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061050790738798249c2e607446efb7ad49ec89dd1865ff42729030908890600090620186a08a0490600401611f15565b6040805180830381600087803b15801561052057600080fd5b505af1158015610534573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105589190611e55565b509392505050565b6001600160a01b0383166000908152600160209081526040808320338452909152812054600019146105c5576001600160a01b0384166000908152600160209081526040808320338452909152812080548492906105bf908490611fdf565b90915550505b6001600160a01b038416600090815260026020526040812080548492906105ed908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055888516835260049091528082205492825290205461063792918216911684611713565b826001600160a01b0316846001600160a01b031660008051602061204f8339815191528460405161066a91815260200190565b60405180910390a35060019392505050565b6040516323b872dd60e01b815233600482015230602482015260448101829052600090736b3595068778dd592e39a122f4f5a5cf09c90fe2906323b872dd90606401602060405180830381600087803b1580156106d857600080fd5b505af11580156106ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107109190611d74565b50604051632967cf8360e21b815260048101839052738798249c2e607446efb7ad49ec89dd1865ff42729063a59f3e0c90602401600060405180830381600087803b15801561075e57600080fd5b505af1158015610772573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820181905273f5bce5077908a1b7370b9ae04adc565ebd64396693506302b9446c9250738798249c2e607446efb7ad49ec89dd1865ff427291819083906370a082319060240160206040518083038186803b1580156107e257600080fd5b505afa1580156107f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061081a9190611e3d565b60006040518663ffffffff1660e01b815260040161083c959493929190611f15565b6040805180830381600087803b15801561085557600080fd5b505af1158015610869573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088d9190611e55565b915061049d9050836108a2620186a084611fc0565b61183f565b6108b133826118dc565b50565b60006108bf8261169a565b60405163097da6d360e41b815273f5bce5077908a1b7370b9ae04adc565ebd643966906397da6d309061091890738798249c2e607446efb7ad49ec89dd1865ff42729030908190600090620186a08a0490600401611f15565b6040805180830381600087803b15801561093157600080fd5b505af1158015610945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109699190611e55565b506040516367dfd4c960e01b815260048101829052909150738798249c2e607446efb7ad49ec89dd1865ff4272906367dfd4c990602401600060405180830381600087803b1580156109ba57600080fd5b505af11580156109ce573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152736b3595068778dd592e39a122f4f5a5cf09c90fe2925063a9059cbb9150859083906370a082319060240160206040518083038186803b158015610a2657600080fd5b505afa158015610a3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611e3d565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b158015610aa457600080fd5b505af1158015610ab8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adc9190611d74565b5092915050565b6000438210610b4c5760405162461bcd60e51b815260206004820152602a60248201527f4d656f777368693a3a6765745072696f72566f7465733a206e6f74207965742060448201526919195d195c9b5a5b995960b21b60648201526084015b60405180910390fd5b6001600160a01b03831660009081526006602052604090205463ffffffff1680610b7a57600091505061049d565b6001600160a01b038416600090815260056020908152604080832063ffffffff600019860181168552925290912054168310610be9576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522060010154905061049d565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff16831015610c2457600091505061049d565b600060001982015b8163ffffffff168163ffffffff161115610cd8576000600263ffffffff848403166001600160a01b038916600090815260056020908152604080832094909304860363ffffffff8181168452948252918390208351808501909452805490941680845260019094015490830152925090871415610cb35760200151945061049d9350505050565b805163ffffffff16871115610cca57819350610cd1565b6001820392505b5050610c2c565b506001600160a01b038516600090815260056020908152604080832063ffffffff9094168352929052206001015491505092915050565b33600090815260026020526040812080548391908390610d30908490611fdf565b90915550506001600160a01b038084166000818152600260209081526040808320805488019055338352600490915280822054928252902054610d7892918216911684611713565b6040518281526001600160a01b03841690339060008051602061204f83398151915290602001610491565b60608167ffffffffffffffff811115610dcc57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015610dff57816020015b6060815260200190600190039081610dea5790505b50905060005b82811015610adc5760008030868685818110610e3157634e487b7160e01b600052603260045260246000fd5b9050602002810190610e439190611f5c565b604051610e51929190611ea4565b600060405180830381855af49150503d8060008114610e8c576040519150601f19603f3d011682016040523d82523d6000602084013e610e91565b606091505b509150915081610edd57604481511015610eaa57600080fd5b60048101905080806020019051810190610ec49190611d94565b60405162461bcd60e51b8152600401610b439190611f49565b80848481518110610efe57634e487b7160e01b600052603260045260246000fd5b60209081029190910101525050600101610e05565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610f3e576000610f70565b6001600160a01b038316600090815260056020908152604080832063ffffffff60001986011684529091529020600101545b9392505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301207fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60c08301526001600160a01b038a1660e083015261010082018990526101208083018990528451808403909101815261014083019094528351939092019290922061190160f01b6101608401526101628301829052610182830181905290916000906101a20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa1580156110f9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661116e5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152687369676e617475726560b81b6064820152608401610b43565b6001600160a01b038116600090815260036020526040902080546001810190915589146111eb5760405162461bcd60e51b815260206004820152602560248201527f4d656f777368693a3a64656c656761746542795369673a20696e76616c6964206044820152646e6f6e636560d81b6064820152608401610b43565b8742111561124d5760405162461bcd60e51b815260206004820152602960248201527f4d656f777368693a3a64656c656761746542795369673a207369676e617475726044820152681948195e1c1a5c995960ba1b6064820152608401610b43565b611257818b6118dc565b505050505b505050505050565b60408051808201825260078152664d656f7773686960c81b60209182015281517f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a866818301527fb2519001d922cc8f01da040a1ebf40356f395758595af77f4a075390db7ffeeb81840152466060820152306080808301919091528351808303909101815260a0820184528051908301206001600160a01b038b81166000818152600386528681208054600181019091557f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960c087015260e0860192909252918c1661010085015261012084018b90526101408401526101608084018a90528551808503909101815261018084019095528451949093019390932061190160f01b6101a08301526101a282018490526101c2820181905291906101e20160408051601f198184030181528282528051602091820120600080855291840180845281905260ff8a169284019290925260608301889052608083018790529092509060019060a0016020604051602081039080840390855afa15801561140b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114795760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a20696e76616c6964207369676e617475604482015261726560f01b6064820152608401610b43565b8a6001600160a01b0316816001600160a01b0316146114da5760405162461bcd60e51b815260206004820152601d60248201527f4d656f777368693a3a7065726d69743a20756e617574686f72697a65640000006044820152606401610b43565b505050844211156115385760405162461bcd60e51b815260206004820152602260248201527f4d656f777368693a3a7065726d69743a207369676e6174757265206578706972604482015261195960f21b6064820152608401610b43565b6001600160a01b038881166000818152600160209081526040808320948c16808452948252918290208a905590518981527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35050505050505050565b6040516323b872dd60e01b815233600482015273f5bce5077908a1b7370b9ae04adc565ebd643966602482015260448101829052600090738798249c2e607446efb7ad49ec89dd1865ff4272906323b872dd90606401602060405180830381600087803b15801561160e57600080fd5b505af1158015611622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116469190611d74565b5060405162ae511b60e21b815273f5bce5077908a1b7370b9ae04adc565ebd643966906302b9446c9061083c90738798249c2e607446efb7ad49ec89dd1865ff427290849030908890600090600401611f15565b33600090815260026020526040812080548392906116b9908490611fdf565b9091555050600080548290038155338152600460205260408120546116ea916001600160a01b039091169083611713565b604051818152600090339060008051602061204f8339815191529060200160405180910390a350565b816001600160a01b0316836001600160a01b0316141580156117355750600081115b1561183a576001600160a01b038316156117bc576001600160a01b03831660009081526006602052604081205463ffffffff1690816117755760006117a7565b6001600160a01b038516600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b90508281036117b88684848461195c565b5050505b6001600160a01b0382161561183a576001600160a01b03821660009081526006602052604081205463ffffffff1690816117f7576000611829565b6001600160a01b038416600090815260056020908152604080832063ffffffff60001987011684529091529020600101545b905082810161125c8584848461195c565b505050565b6001600160a01b03821660009081526002602052604081208054839290611867908490611fa8565b925050819055508060008082825461187f9190611fa8565b90915550506001600160a01b038083166000908152600460205260408120546118a9921683611713565b6040518181526001600160a01b0383169060009060008051602061204f8339815191529060200160405180910390a35050565b6001600160a01b03808316600081815260046020818152604080842080546002845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611956828483611713565b50505050565b600061196743611aa9565b905060008463ffffffff161180156119b057506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b156119ed576001600160a01b038516600090815260056020908152604080832063ffffffff60001989011684529091529020600101829055611a5e565b60408051808201825263ffffffff808416825260208083018681526001600160a01b038a166000818152600584528681208b8616825284528681209551865490861663ffffffff19918216178755925160019687015590815260069092529390208054928801909116919092161790555b60408051848152602081018490526001600160a01b038716917fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724910160405180910390a25050505050565b60006401000000008210611b255760405162461bcd60e51b815260206004820152603760248201527f4d656f777368693a3a5f7772697465436865636b706f696e743a20626c6f636b60448201527f206e756d626572206578636565647320333220626974730000000000000000006064820152608401610b43565b5090565b80356001600160a01b0381168114611b4057600080fd5b919050565b803560ff81168114611b4057600080fd5b600060208284031215611b67578081fd5b610f7082611b29565b60008060408385031215611b82578081fd5b611b8b83611b29565b9150611b9960208401611b29565b90509250929050565b600080600060608486031215611bb6578081fd5b611bbf84611b29565b9250611bcd60208501611b29565b9150604084013590509250925092565b600080600080600080600060e0888a031215611bf7578283fd5b611c0088611b29565b9650611c0e60208901611b29565b95506040880135945060608801359350611c2a60808901611b45565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215611c58578182fd5b611c6183611b29565b946020939093013593505050565b60008060008060008060c08789031215611c87578182fd5b611c9087611b29565b95506020870135945060408701359350611cac60608801611b45565b92506080870135915060a087013590509295509295509295565b60008060408385031215611cd8578182fd5b611ce183611b29565b9150602083013563ffffffff81168114611cf9578182fd5b809150509250929050565b60008060208385031215611d16578182fd5b823567ffffffffffffffff80821115611d2d578384fd5b818501915085601f830112611d40578384fd5b813581811115611d4e578485fd5b8660208260051b8501011115611d62578485fd5b60209290920196919550909350505050565b600060208284031215611d85578081fd5b81518015158114610f70578182fd5b600060208284031215611da5578081fd5b815167ffffffffffffffff80821115611dbc578283fd5b818401915084601f830112611dcf578283fd5b815181811115611de157611de1612038565b604051601f8201601f19908116603f01168101908382118183101715611e0957611e09612038565b81604052828152876020848701011115611e21578586fd5b611e32836020830160208801611ff6565b979650505050505050565b600060208284031215611e4e578081fd5b5051919050565b60008060408385031215611e67578182fd5b505080516020909101519092909150565b60008151808452611e90816020860160208601611ff6565b601f01601f19169290920160200192915050565b8183823760009101908152919050565b6000602080830181845280855180835260408601915060408160051b8701019250838701855b82811015611f0857603f19888603018452611ef6858351611e78565b94509285019290850190600101611eda565b5092979650505050505050565b6001600160a01b03958616815293851660208501529190931660408301526060820192909252608081019190915260a00190565b602081526000610f706020830184611e78565b6000808335601e19843603018112611f72578283fd5b83018035915067ffffffffffffffff821115611f8c578283fd5b602001915036819003821315611fa157600080fd5b9250929050565b60008219821115611fbb57611fbb612022565b500190565b6000816000190483118215151615611fda57611fda612022565b500290565b600082821015611ff157611ff1612022565b500390565b60005b83811015612011578181015183820152602001611ff9565b838111156119565750506000910152565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122035b0fe5adbdae498498519145e816863e43ce263ac09956b745a7b88ea999a1f64736f6c63430008040033