608060405269065a4da25d3016c000006000553480156200001f57600080fd5b5060405162002c7638038062002c7683398101604081905262000042916200016f565b428110156200006e5760405162461bcd60e51b8152600401620000659062000271565b60405180910390fd5b600080546001600160a01b0385168083526004602052604080842080546001600160601b0319166001600160601b0390941693909317909255825491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000dc919062000283565b60405180910390a3600180546001600160a01b0319166001600160a01b0384811691909117918290556040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6926200013b926000929116906200024b565b60405180910390a160025550620002ea9050565b80516200015c81620002c5565b92915050565b80516200015c81620002df565b6000806000606084860312156200018557600080fd5b60006200019386866200014f565b9350506020620001a6868287016200014f565b9250506040620001b98682870162000162565b9150509250925092565b620001ce81620002b1565b82525050565b620001ce816200029c565b6000620001ee603a8362000293565b7f4761696e3a3a636f6e7374727563746f723a206d696e74696e672063616e206f81527f6e6c7920626567696e206166746572206465706c6f796d656e74000000000000602082015260400192915050565b620001ce81620002ae565b604081016200025b8285620001c3565b6200026a6020830184620001d4565b9392505050565b602080825281016200015c81620001df565b602081016200015c828462000240565b90815260200190565b60006001600160a01b0382166200015c565b90565b60006200015c8260006200015c826200029c565b620002d0816200029c565b8114620002dc57600080fd5b50565b620002d081620002ae565b61297c80620002fa6000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c80636fcfff45116100f9578063b4b5ea5711610097578063dd62ed3e11610071578063dd62ed3e14610389578063e7a324dc1461039c578063f1127ed8146103a4578063fca3b5aa146103c5576101c4565b8063b4b5ea5714610350578063c3cda52014610363578063d505accf14610376576101c4565b8063782d6fe1116100d3578063782d6fe1146103025780637ecebe001461032257806395d89b4114610335578063a9059cbb1461033d576101c4565b80636fcfff45146102d457806370a08231146102e757806376c71ca1146102fa576101c4565b806330b36cef1161016657806342966c681161014057806342966c6814610286578063587cde1e146102995780635c11d62f146102ac5780635c19a95c146102c1576101c4565b806330b36cef14610254578063313ce5671461025c57806340c10f1914610271576101c4565b806318160ddd116101a257806318160ddd1461021c57806320606b701461023157806323b872dd1461023957806330adf81f1461024c576101c4565b806306fdde03146101c957806307546172146101e7578063095ea7b3146101fc575b600080fd5b6101d16103d8565b6040516101de91906124eb565b60405180910390f35b6101ef6103fc565b6040516101de91906123be565b61020f61020a366004611bc8565b61040b565b6040516101de91906123e7565b6102246104ca565b6040516101de91906123f5565b6102246104d0565b61020f610247366004611adf565b6104e7565b610224610630565b61022461063c565b610264610642565b6040516101de9190612635565b61028461027f366004611bc8565b610647565b005b610284610294366004611caf565b610862565b6101ef6102a7366004611a7f565b610977565b6102b4610992565b6040516101de919061260c565b6102846102cf366004611a7f565b61099a565b6102b46102e2366004611a7f565b6109a7565b6102246102f5366004611a7f565b6109bf565b6102646109e3565b610315610310366004611bc8565b6109e8565b6040516101de9190612651565b610224610330366004611a7f565b610bf6565b6101d1610c08565b61020f61034b366004611bc8565b610c28565b61031561035e366004611a7f565b610c64565b610284610371366004611bf8565b610cd4565b610284610384366004611b2c565b610ebe565b610224610397366004611aa5565b6111aa565b6102246111de565b6103b76103b2366004611c7f565b6111ea565b6040516101de92919061261a565b6102846103d3366004611a7f565b61121f565b6040518060400160405280600881526020016704761696e537761760c41b81525081565b6001546001600160a01b031681565b6000806000198314156104215750600019610446565b61044383604051806060016040528060258152602001612767602591396112b2565b90505b3360008181526003602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906104b6908590612643565b60405180910390a360019150505b92915050565b60005481565b6040516104dc906123a8565b604051809103902081565b6001600160a01b03831660009081526003602090815260408083203380855290835281842054825160608101909352602580845291936001600160601b0390911692859261053f9288929190612767908301396112b2565b9050866001600160a01b0316836001600160a01b03161415801561056c57506001600160601b0382811614155b1561061657600061059683836040518060600160405280603d81526020016128d8603d91396112e1565b6001600160a01b038981166000818152600360209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061060c908590612643565b60405180910390a3505b610621878783611320565b600193505050505b9392505050565b6040516104dc9061239d565b60025481565b601281565b6001546001600160a01b0316331461067a5760405162461bcd60e51b81526004016106719061258c565b60405180910390fd5b60025442101561069c5760405162461bcd60e51b8152600401610671906125dc565b6001600160a01b0382166106c25760405162461bcd60e51b81526004016106719061259c565b6106d0426301e133806114c6565b60028190555060006106fa82604051806060016040528060228152602001612835602291396112b2565b905061071661070f600054600260ff166114eb565b6064611525565b816001600160601b0316111561073e5760405162461bcd60e51b8152600401610671906125ec565b610774610756600054836001600160601b03166114c6565b6040518060600160405280602781526020016128b1602791396112b2565b6001600160601b0390811660009081556001600160a01b0385168152600460209081526040918290205482516060810190935260258084526107c6949190911692859290919061291590830139611567565b6001600160a01b03841660008181526004602052604080822080546001600160601b0319166001600160601b03959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610830908590612643565b60405180910390a36001600160a01b0380841660009081526005602052604081205461085d9216836115a3565b505050565b600061088682604051806060016040528060228152602001612835602291396112b2565b336000908152600460205260409020549091506001600160601b03808316911610156108c45760405162461bcd60e51b8152600401610671906125ac565b6109176108dc600054836001600160601b0316611735565b6040518060400160405280602081526020017f4761696e3a3a6275726e3a20696e73756666696369656e742062616c616e63658152506112b2565b6001600160601b03908116600090815533815260046020526040902054610946916108dc918116908416611735565b33600090815260046020526040902080546001600160601b0319166001600160601b03929092169190911790555050565b6005602052600090815260409020546001600160a01b031681565b6301e1338081565b6109a43382611777565b50565b60076020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600460205260409020546001600160601b031690565b600281565b6000438210610a095760405162461bcd60e51b81526004016106719061253c565b6001600160a01b03831660009081526007602052604090205463ffffffff1680610a375760009150506104c4565b6001600160a01b038416600090815260066020908152604080832063ffffffff600019860181168552925290912054168310610ab3576001600160a01b03841660009081526006602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b031690506104c4565b6001600160a01b038416600090815260066020908152604080832083805290915290205463ffffffff16831015610aee5760009150506104c4565b600060001982015b8163ffffffff168163ffffffff161115610bb157600282820363ffffffff16048103610b20611a3c565b506001600160a01b038716600090815260066020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b03169181019190915290871415610b8c576020015194506104c49350505050565b805163ffffffff16871115610ba357819350610baa565b6001820392505b5050610af6565b506001600160a01b038516600090815260066020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60086020526000908152604090205481565b6040518060400160405280600481526020016323a0a4a760e11b81525081565b600080610c4d8360405180606001604052806026815260200161288b602691396112b2565b9050610c5a338583611320565b5060019392505050565b6001600160a01b03811660009081526007602052604081205463ffffffff1680610c8f576000610629565b6001600160a01b0383166000908152600660209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03169392505050565b6000604051610ce2906123a8565b60408051918290038220828201909152600882526704761696e537761760c41b6020909201919091527fd6c450a58e296bf48c49f47c8a8dbb057a59c4c5e729cfa76bb1f8d8207d8037610d34611801565b30604051602001610d48949392919061249b565b6040516020818303038152906040528051906020012090506000604051610d6e906123b3565b604051908190038120610d89918a908a908a9060200161245d565b60405160208183030381529060405280519060200120905060008282604051602001610db692919061236c565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610df394939291906124d0565b6020604051602081039080840390855afa158015610e15573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610e485760405162461bcd60e51b81526004016106719061254c565b6001600160a01b03811660009081526008602052604090208054600181019091558914610e875760405162461bcd60e51b81526004016106719061252c565b87421115610ea75760405162461bcd60e51b81526004016106719061250c565b610eb1818b611777565b505050505b505050505050565b6000600019861415610ed35750600019610ef8565b610ef586604051806060016040528060248152602001612811602491396112b2565b90505b6000604051610f06906123a8565b60408051918290038220828201909152600882526704761696e537761760c41b6020909201919091527fd6c450a58e296bf48c49f47c8a8dbb057a59c4c5e729cfa76bb1f8d8207d8037610f58611801565b30604051602001610f6c949392919061249b565b6040516020818303038152906040528051906020012090506000604051610f929061239d565b604080519182900382206001600160a01b038d16600090815260086020908152929020805460018101909155610fd49391928e928e928e9290918e9101612403565b6040516020818303038152906040528051906020012090506000828260405160200161100192919061236c565b60405160208183030381529060405280519060200120905060006001828989896040516000815260200160405260405161103e94939291906124d0565b6020604051602081039080840390855afa158015611060573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166110935760405162461bcd60e51b81526004016106719061257c565b8b6001600160a01b0316816001600160a01b0316146110c45760405162461bcd60e51b8152600401610671906125bc565b884211156110e45760405162461bcd60e51b8152600401610671906125cc565b84600360008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925876040516111949190612643565b60405180910390a3505050505050505050505050565b6001600160a01b0391821660009081526003602090815260408083209390941682529190915220546001600160601b031690565b6040516104dc906123b3565b600660209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6001546001600160a01b031633146112495760405162461bcd60e51b8152600401610671906125fc565b6001546040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f691611288916001600160a01b039091169084906123cc565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106112d95760405162461bcd60e51b815260040161067191906124eb565b509192915050565b6000836001600160601b0316836001600160601b0316111582906113185760405162461bcd60e51b815260040161067191906124eb565b505050900390565b6001600160a01b0383166113465760405162461bcd60e51b8152600401610671906124fc565b6001600160a01b03821661136c5760405162461bcd60e51b81526004016106719061255c565b6001600160a01b0383166000908152600460209081526040918290205482516060810190935260368084526113b7936001600160601b0390921692859291906127db908301396112e1565b6001600160a01b03848116600090815260046020908152604080832080546001600160601b0319166001600160601b0396871617905592861682529082902054825160608101909352603080845261141f949190911692859290919061273790830139611567565b6001600160a01b038381166000818152600460205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061148c908590612643565b60405180910390a36001600160a01b0380841660009081526005602052604080822054858416835291205461085d929182169116836115a3565b6000828201838110156106295760405162461bcd60e51b81526004016106719061251c565b6000826114fa575060006104c4565b8282028284828161150757fe5b04146106295760405162461bcd60e51b81526004016106719061256c565b600061062983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611805565b6000838301826001600160601b03808716908316101561159a5760405162461bcd60e51b815260040161067191906124eb565b50949350505050565b816001600160a01b0316836001600160a01b0316141580156115ce57506000816001600160601b0316115b1561085d576001600160a01b03831615611686576001600160a01b03831660009081526007602052604081205463ffffffff16908161160e57600061164d565b6001600160a01b0385166000908152600660209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b90506000611674828560405180606001604052806028815260200161278c602891396112e1565b90506116828684848461183c565b5050505b6001600160a01b0382161561085d576001600160a01b03821660009081526007602052604081205463ffffffff1690816116c1576000611700565b6001600160a01b0384166000908152600660209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061172782856040518060600160405280602781526020016127b460279139611567565b9050610eb68584848461183c565b600061062983836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506119f1565b6001600160a01b03808316600081815260056020818152604080842080546004845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46117fb8284836115a3565b50505050565b4690565b600081836118265760405162461bcd60e51b815260040161067191906124eb565b50600083858161183257fe5b0495945050505050565b60006118604360405180606001604052806034815260200161285760349139611a15565b905060008463ffffffff161180156118a957506001600160a01b038516600090815260066020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611908576001600160a01b0385166000908152600660209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b038516021790556119a7565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600683528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600790935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516119e292919061265f565b60405180910390a25050505050565b600081848411156113185760405162461bcd60e51b815260040161067191906124eb565b600081600160201b84106112d95760405162461bcd60e51b815260040161067191906124eb565b604080518082019091526000808252602082015290565b80356104c481612707565b80356104c48161271b565b80356104c481612724565b80356104c48161272d565b600060208284031215611a9157600080fd5b6000611a9d8484611a53565b949350505050565b60008060408385031215611ab857600080fd5b6000611ac48585611a53565b9250506020611ad585828601611a53565b9150509250929050565b600080600060608486031215611af457600080fd5b6000611b008686611a53565b9350506020611b1186828701611a53565b9250506040611b2286828701611a5e565b9150509250925092565b600080600080600080600060e0888a031215611b4757600080fd5b6000611b538a8a611a53565b9750506020611b648a828b01611a53565b9650506040611b758a828b01611a5e565b9550506060611b868a828b01611a5e565b9450506080611b978a828b01611a74565b93505060a0611ba88a828b01611a5e565b92505060c0611bb98a828b01611a5e565b91505092959891949750929550565b60008060408385031215611bdb57600080fd5b6000611be78585611a53565b9250506020611ad585828601611a5e565b60008060008060008060c08789031215611c1157600080fd5b6000611c1d8989611a53565b9650506020611c2e89828a01611a5e565b9550506040611c3f89828a01611a5e565b9450506060611c5089828a01611a74565b9350506080611c6189828a01611a5e565b92505060a0611c7289828a01611a5e565b9150509295509295509295565b60008060408385031215611c9257600080fd5b6000611c9e8585611a53565b9250506020611ad585828601611a69565b600060208284031215611cc157600080fd5b6000611a9d8484611a5e565b611cd68161268c565b82525050565b611cd681612697565b611cd68161269c565b611cd6611cfa8261269c565b61269c565b6000611d0a8261267a565b611d14818561267e565b9350611d248185602086016126d1565b611d2d816126fd565b9093019392505050565b6000611d44603c8361267e565b7f4761696e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747281527f616e736665722066726f6d20746865207a65726f206164647265737300000000602082015260400192915050565b6000611da360268361267e565b7f4761696e3a3a64656c656761746542795369673a207369676e617475726520658152651e1c1a5c995960d21b602082015260400192915050565b6000611deb600283612687565b61190160f01b815260020192915050565b6000611e09601b8361267e565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b6000611e4260228361267e565b7f4761696e3a3a64656c656761746542795369673a20696e76616c6964206e6f6e815261636560f01b602082015260400192915050565b6000611e8660278361267e565b7f4761696e3a3a6765745072696f72566f7465733a206e6f742079657420646574815266195c9b5a5b995960ca1b602082015260400192915050565b6000611ecf605283612687565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520192915050565b6000611f4960268361267e565b7f4761696e3a3a64656c656761746542795369673a20696e76616c6964207369678152656e617475726560d01b602082015260400192915050565b6000611f91604383612687565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430192915050565b6000611ffc603a8361267e565b7f4761696e3a3a5f7472616e73666572546f6b656e733a2063616e6e6f7420747281527f616e7366657220746f20746865207a65726f2061646472657373000000000000602082015260400192915050565b600061205b60218361267e565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f8152607760f81b602082015260400192915050565b600061209e601f8361267e565b7f4761696e3a3a7065726d69743a20696e76616c6964207369676e617475726500815260200192915050565b60006120d760248361267e565b7f4761696e3a3a6d696e743a206f6e6c7920746865206d696e7465722063616e208152631b5a5b9d60e21b602082015260400192915050565b600061211d602f8361267e565b7f4761696e3a3a6d696e743a2063616e6e6f74207472616e7366657220746f207481526e6865207a65726f206164647265737360881b602082015260400192915050565b600061216e60208361267e565b7f4761696e3a3a6275726e3a20696e73756666696369656e742062616c616e6365815260200192915050565b60006121a7601a8361267e565b7f4761696e3a3a7065726d69743a20756e617574686f72697a6564000000000000815260200192915050565b60006121e0601f8361267e565b7f4761696e3a3a7065726d69743a207369676e6174757265206578706972656400815260200192915050565b600061221960238361267e565b7f4761696e3a3a6d696e743a206d696e74696e67206e6f7420616c6c6f776564208152621e595d60ea1b602082015260400192915050565b600061225e601d8361267e565b7f4761696e3a3a6d696e743a206578636565646564206d696e7420636170000000815260200192915050565b6000612297603a83612687565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0192915050565b60006122f6603e8361267e565b7f4761696e3a3a7365744d696e7465723a206f6e6c7920746865206d696e74657281527f2063616e206368616e676520746865206d696e74657220616464726573730000602082015260400192915050565b611cd6816126ab565b611cd6816126b4565b611cd6816126c6565b611cd6816126ba565b600061237782611dde565b91506123838285611cee565b6020820191506123938284611cee565b5060200192915050565b60006104c482611ec2565b60006104c482611f84565b60006104c48261228a565b602081016104c48284611ccd565b604081016123da8285611ccd565b6106296020830184611ccd565b602081016104c48284611cdc565b602081016104c48284611ce5565b60c081016124118289611ce5565b61241e6020830188611ccd565b61242b6040830187611ccd565b6124386060830186611ce5565b6124456080830185611ce5565b61245260a0830184611ce5565b979650505050505050565b6080810161246b8287611ce5565b6124786020830186611ccd565b6124856040830185611ce5565b6124926060830184611ce5565b95945050505050565b608081016124a98287611ce5565b6124b66020830186611ce5565b6124c36040830185611ce5565b6124926060830184611ccd565b608081016124de8287611ce5565b6124786020830186612351565b602080825281016106298184611cff565b602080825281016104c481611d37565b602080825281016104c481611d96565b602080825281016104c481611dfc565b602080825281016104c481611e35565b602080825281016104c481611e79565b602080825281016104c481611f3c565b602080825281016104c481611fef565b602080825281016104c48161204e565b602080825281016104c481612091565b602080825281016104c4816120ca565b602080825281016104c481612110565b602080825281016104c481612161565b602080825281016104c48161219a565b602080825281016104c4816121d3565b602080825281016104c48161220c565b602080825281016104c481612251565b602080825281016104c4816122e9565b602081016104c48284612348565b604081016126288285612348565b6106296020830184612363565b602081016104c48284612351565b602081016104c4828461235a565b602081016104c48284612363565b6040810161266d828561235a565b610629602083018461235a565b5190565b90815260200190565b919050565b60006104c48261269f565b151590565b90565b6001600160a01b031690565b63ffffffff1690565b60ff1690565b6001600160601b031690565b60006104c4826126ba565b60005b838110156126ec5781810151838201526020016126d4565b838111156117fb5750506000910152565b601f01601f191690565b6127108161268c565b81146109a457600080fd5b6127108161269c565b612710816126ab565b612710816126b456fe4761696e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e74206f766572666c6f77734761696e3a3a617070726f76653a20616d6f756e74206578636565647320393620626974734761696e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e7420756e646572666c6f77734761696e3a3a5f6d6f7665566f7465733a20766f746520616d6f756e74206f766572666c6f77734761696e3a3a5f7472616e73666572546f6b656e733a207472616e7366657220616d6f756e7420657863656564732062616c616e63654761696e3a3a7065726d69743a20616d6f756e74206578636565647320393620626974734761696e3a3a6d696e743a20616d6f756e74206578636565647320393620626974734761696e3a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d626572206578636565647320333220626974734761696e3a3a7472616e736665723a20616d6f756e74206578636565647320393620626974734761696e3a3a6d696e743a20746f74616c537570706c79206578636565647320393620626974734761696e3a3a7472616e7366657246726f6d3a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e63654761696e3a3a6d696e743a207472616e7366657220616d6f756e74206f766572666c6f7773a365627a7a72315820b757eba8ccb397d601574b10534e202e4742d9c0e368ecf1e2c8c9d6ada8081a6c6578706572696d656e74616cf564736f6c634300051100400000000000000000000000003a1d9a4ce080834fcb85243883df7aedb3a08ab20000000000000000000000003a1d9a4ce080834fcb85243883df7aedb3a08ab2000000000000000000000000000000000000000000000000000000005fe02a59