0x608060405234801561001057600080fd5b50614a46806100206000396000f3fe608060405234801561001057600080fd5b50600436106102535760003560e01c8063715018a611610146578063c54e44eb116100c3578063e136f65f11610087578063e136f65f146106d0578063e88ee31f146106ee578063e8aff8761461070c578063e985e9c514610728578063f2fde38b14610758578063f34eb0b81461077457610253565b8063c54e44eb1461062c578063c5ea3c651461064a578063c87b56dd14610668578063d96a094a14610698578063db0ed6a0146106b457610253565b8063a22cb4651161010a578063a22cb4651461058a578063add17404146105a6578063b2855b4f146105d6578063b88d4fde146105f2578063c33554ed1461060e57610253565b8063715018a61461050a578063846325b81461051457806388e765ff146105305780638da5cb5b1461054e57806395d89b411461056c57610253565b806339e7fddc116101d4578063627fe54811610198578063627fe548146104405780636352211e1461045c5780636c0360eb1461048c5780636d70f7ae146104aa57806370a08231146104da57610253565b806339e7fddc146103b057806342842e0e146103ce57806343508b05146103ea57806355f804b3146104065780635c8aee311461042257610253565b80631618a22a1161021b5780631618a22a1461030e57806316bd86461461032a57806323b872dd146103465780632482251414610362578063359833961461038057610253565b806301ffc9a71461025857806306fdde0314610288578063081812fc146102a6578063095ea7b3146102d65780630ef31451146102f2575b600080fd5b610272600480360381019061026d9190612cf1565b610790565b60405161027f9190612d39565b60405180910390f35b6102906107a2565b60405161029d9190612de4565b60405180910390f35b6102c060048036038101906102bb9190612e3c565b610834565b6040516102cd9190612eaa565b60405180910390f35b6102f060048036038101906102eb9190612ef1565b61087a565b005b61030c60048036038101906103079190612e3c565b610991565b005b61032860048036038101906103239190612f5d565b6109a3565b005b610344600480360381019061033f9190612e3c565b610a06565b005b610360600480360381019061035b9190612f9d565b610a53565b005b61036a610ab3565b6040516103779190612fff565b60405180910390f35b61039a6004803603810190610395919061301a565b610ab9565b6040516103a79190612fff565b60405180910390f35b6103b8610b02565b6040516103c59190612eaa565b60405180910390f35b6103e860048036038101906103e39190612f9d565b610b28565b005b61040460048036038101906103ff9190612ef1565b610b48565b005b610420600480360381019061041b919061317c565b610b7d565b005b61042a610b98565b6040516104379190613224565b60405180910390f35b61045a60048036038101906104559190613307565b610bbe565b005b61047660048036038101906104719190612e3c565b610d1f565b6040516104839190612eaa565b60405180910390f35b610494610da5565b6040516104a19190612de4565b60405180910390f35b6104c460048036038101906104bf919061301a565b610e33565b6040516104d19190612d39565b60405180910390f35b6104f460048036038101906104ef919061301a565b610e89565b6040516105019190612fff565b60405180910390f35b610512610f40565b005b61052e60048036038101906105299190612e3c565b610f54565b005b610538610f66565b6040516105459190612fff565b60405180910390f35b610556610f6c565b6040516105639190612eaa565b60405180910390f35b610574610f96565b6040516105819190612de4565b60405180910390f35b6105a4600480360381019061059f9190612f5d565b611028565b005b6105c060048036038101906105bb919061301a565b61103e565b6040516105cd9190612d39565b60405180910390f35b6105f060048036038101906105eb919061301a565b611094565b005b61060c60048036038101906106079190613404565b61113b565b005b61061661119d565b6040516106239190612fff565b60405180910390f35b6106346111a3565b6040516106419190613224565b60405180910390f35b6106526111c9565b60405161065f9190612fff565b60405180910390f35b610682600480360381019061067d9190612e3c565b6111cf565b60405161068f9190612de4565b60405180910390f35b6106b260048036038101906106ad9190612e3c565b611225565b005b6106ce60048036038101906106c99190613487565b6115e7565b005b6106d861184b565b6040516106e59190612fff565b60405180910390f35b6106f6611851565b6040516107039190612fff565b60405180910390f35b61072660048036038101906107219190612e3c565b611857565b005b610742600480360381019061073d919061353a565b611869565b60405161074f9190612d39565b60405180910390f35b610772600480360381019061076d919061301a565b6118fd565b005b61078e60048036038101906107899190612e3c565b611980565b005b600061079b826119cd565b9050919050565b6060609780546107b1906135a9565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906135a9565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b600061083f82611aaf565b609b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061088582610d1f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ec9061364c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610914611afa565b73ffffffffffffffffffffffffffffffffffffffff16148061094357506109428161093d611afa565b611869565b5b610982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610979906136de565b60405180910390fd5b61098c8383611b02565b505050565b610999611bbb565b8060ce8190555050565b6109ab611bbb565b8060d360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610a0e611bbb565b7fe455b00a701333698e59731db0cdc7974353a7fc1c7bc2aeeefcbcf7def1ce8360cc5482604051610a419291906136fe565b60405180910390a18060cc8190555050565b610a64610a5e611afa565b82611c39565b610aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9a90613799565b60405180910390fd5b610aae838383611cce565b505050565b60cb5481565b600060d460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610b438383836040518060200160405280600081525061113b565b505050565b610b50611bbb565b60005b81811015610b7857610b6483611fc7565b508080610b70906137e8565b915050610b53565b505050565b610b85611bbb565b8060d09081610b9491906139d2565b5050565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60d36000610bca611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4890613b16565b60405180910390fd5b60005b8251811015610ce1578160d26000858481518110610c7557610c74613b36565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610cd9906137e8565b915050610c54565b507f9577b6095483cb41cb3b9da8ec5c4a275b05f612075f1c6b93ff2226cace77298282604051610d13929190613c23565b60405180910390a15050565b600080610d2b8361203e565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9390613c9f565b60405180910390fd5b80915050919050565b60d08054610db2906135a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610dde906135a9565b8015610e2b5780601f10610e0057610100808354040283529160200191610e2b565b820191906000526020600020905b815481529060010190602001808311610e0e57829003601f168201915b505050505081565b600060d360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610ef9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef090613d31565b60405180910390fd5b609a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f48611bbb565b610f52600061207b565b565b610f5c611bbb565b8060d58190555050565b60cd5481565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060988054610fa5906135a9565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd1906135a9565b801561101e5780601f10610ff35761010080835404028352916020019161101e565b820191906000526020600020905b81548152906001019060200180831161100157829003601f168201915b5050505050905090565b61103a611033611afa565b8383612141565b5050565b600060d260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61109c611bbb565b7f687b87b3841e369388ea8d4a68526033134631eae9911d98a35fc6d38fac49b260d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826040516110ef929190613d51565b60405180910390a18060d160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61114c611146611afa565b83611c39565b61118b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118290613799565b60405180910390fd5b611197848484846122ad565b50505050565b60cf5481565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60cc5481565b6060600060d080546111e0906135a9565b9050116111fc576040518060200160405280600081525061121e565b60d060405160200161120e9190613e54565b6040516020818303038152906040525b9050919050565b60d26000611231611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90613ee8565b60405180910390fd5b6000811180156112ca575060cd548111155b611309576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130090613f54565b60405180910390fd5b60d55460d46000611318611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548261135e9190613f74565b111561139f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139690613f54565b60405180910390fd5b6114246113aa611afa565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660ce54846113db9190613fa8565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612309909392919063ffffffff16565b6114a961142f611afa565b60d160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660cf54846114609190613fa8565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612309909392919063ffffffff16565b8060d460006114b6611afa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546114ff9190613f74565b9250508190555060008167ffffffffffffffff81111561152257611521613051565b5b6040519080825280602002602001820160405280156115505781602001602082028036833780820191505090505b50905060005b828110156115a05761156e611569611afa565b611fc7565b82828151811061158157611580613b36565b5b6020026020010181815250508080611598906137e8565b915050611556565b507f1a70948fa7ca0b32ad86db8be62baba71538673ff1f5196ceaa987332e612b916115ca611afa565b83836040516115db939291906140a8565b60405180910390a15050565b60008060019054906101000a900460ff161590508080156116185750600160008054906101000a900460ff1660ff16105b80611645575061162730612392565b1580156116445750600160008054906101000a900460ff1660ff16145b5b611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90614158565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156116c1576001600060016101000a81548160ff0219169083151502179055505b6116cb86866123b5565b6116d3612412565b8360c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e860cb81905550611b5860cc81905550600a60cd819055506359682f0060ce81905550681b1ae4d6e2ef50000060cf819055506040518060200160405280600081525060d090816117a891906139d2565b508160d160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080156118435760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498600160405161183a91906141c0565b60405180910390a15b505050505050565b60ce5481565b60d55481565b61185f611bbb565b8060cf8190555050565b6000609c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611905611bbb565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b9061424d565b60405180910390fd5b61197d8161207b565b50565b611988611bbb565b7f254be12b4d64e3bd8c3e32c13224480923a602da3b3bc75561585e20ec3332ed60cd54826040516119bb9291906136fe565b60405180910390a18060cd8190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a9857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611aa85750611aa78261246b565b5b9050919050565b611ab8816124d5565b611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee90613c9f565b60405180910390fd5b50565b600033905090565b81609b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b7583610d1f565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611bc3611afa565b73ffffffffffffffffffffffffffffffffffffffff16611be1610f6c565b73ffffffffffffffffffffffffffffffffffffffff1614611c37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2e906142b9565b60405180910390fd5b565b600080611c4583610d1f565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c875750611c868185611869565b5b80611cc557508373ffffffffffffffffffffffffffffffffffffffff16611cad84610834565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611cee82610d1f565b73ffffffffffffffffffffffffffffffffffffffff1614611d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3b9061434b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611db3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daa906143dd565b60405180910390fd5b611dc08383836001612516565b8273ffffffffffffffffffffffffffffffffffffffff16611de082610d1f565b73ffffffffffffffffffffffffffffffffffffffff1614611e36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2d9061434b565b60405180910390fd5b609b600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001609a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001609a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816099600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fc2838383600161251c565b505050565b600060cc5460cb541115612010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200790614449565b60405180910390fd5b60cb6000815480929190612023906137e8565b91905055506120348260cb54612522565b60cb549050919050565b60006099600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a6906144b5565b60405180910390fd5b80609c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122a09190612d39565b60405180910390a3505050565b6122b8848484611cce565b6122c484848484612540565b612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90614547565b60405180910390fd5b50505050565b61238c846323b872dd60e01b85858560405160240161232a93929190614567565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506126c7565b50505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16612404576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123fb90614610565b60405180910390fd5b61240e828261278f565b5050565b600060019054906101000a900460ff16612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890614610565b60405180910390fd5b612469612802565b565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166124f78361203e565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b50505050565b50505050565b61253c828260405180602001604052806000815250612863565b5050565b60006125618473ffffffffffffffffffffffffffffffffffffffff16612392565b156126ba578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261258a611afa565b8786866040518563ffffffff1660e01b81526004016125ac9493929190614685565b6020604051808303816000875af19250505080156125e857506040513d601f19601f820116820180604052508101906125e591906146e6565b60015b61266a573d8060008114612618576040519150601f19603f3d011682016040523d82523d6000602084013e61261d565b606091505b506000815103612662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265990614547565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506126bf565b600190505b949350505050565b6000612729826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166128be9092919063ffffffff16565b905060008151148061274b57508080602001905181019061274a9190614728565b5b61278a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612781906147c7565b60405180910390fd5b505050565b600060019054906101000a900460ff166127de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d590614610565b60405180910390fd5b81609790816127ed91906139d2565b5080609890816127fd91906139d2565b505050565b600060019054906101000a900460ff16612851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284890614610565b60405180910390fd5b61286161285c611afa565b61207b565b565b61286d83836128d6565b61287a6000848484612540565b6128b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b090614547565b60405180910390fd5b505050565b60606128cd8484600085612af3565b90509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612945576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293c90614833565b60405180910390fd5b61294e816124d5565b1561298e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129859061489f565b60405180910390fd5b61299c600083836001612516565b6129a5816124d5565b156129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc9061489f565b60405180910390fd5b6001609a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816099600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612aef60008383600161251c565b5050565b606082471015612b38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2f90614931565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051612b61919061498d565b60006040518083038185875af1925050503d8060008114612b9e576040519150601f19603f3d011682016040523d82523d6000602084013e612ba3565b606091505b5091509150612bb487838387612bc0565b92505050949350505050565b60608315612c22576000835103612c1a57612bda85612392565b612c19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c10906149f0565b60405180910390fd5b5b829050612c2d565b612c2c8383612c35565b5b949350505050565b600082511115612c485781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7c9190612de4565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cce81612c99565b8114612cd957600080fd5b50565b600081359050612ceb81612cc5565b92915050565b600060208284031215612d0757612d06612c8f565b5b6000612d1584828501612cdc565b91505092915050565b60008115159050919050565b612d3381612d1e565b82525050565b6000602082019050612d4e6000830184612d2a565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d8e578082015181840152602081019050612d73565b60008484015250505050565b6000601f19601f8301169050919050565b6000612db682612d54565b612dc08185612d5f565b9350612dd0818560208601612d70565b612dd981612d9a565b840191505092915050565b60006020820190508181036000830152612dfe8184612dab565b905092915050565b6000819050919050565b612e1981612e06565b8114612e2457600080fd5b50565b600081359050612e3681612e10565b92915050565b600060208284031215612e5257612e51612c8f565b5b6000612e6084828501612e27565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e9482612e69565b9050919050565b612ea481612e89565b82525050565b6000602082019050612ebf6000830184612e9b565b92915050565b612ece81612e89565b8114612ed957600080fd5b50565b600081359050612eeb81612ec5565b92915050565b60008060408385031215612f0857612f07612c8f565b5b6000612f1685828601612edc565b9250506020612f2785828601612e27565b9150509250929050565b612f3a81612d1e565b8114612f4557600080fd5b50565b600081359050612f5781612f31565b92915050565b60008060408385031215612f7457612f73612c8f565b5b6000612f8285828601612edc565b9250506020612f9385828601612f48565b9150509250929050565b600080600060608486031215612fb657612fb5612c8f565b5b6000612fc486828701612edc565b9350506020612fd586828701612edc565b9250506040612fe686828701612e27565b9150509250925092565b612ff981612e06565b82525050565b60006020820190506130146000830184612ff0565b92915050565b6000602082840312156130305761302f612c8f565b5b600061303e84828501612edc565b91505092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61308982612d9a565b810181811067ffffffffffffffff821117156130a8576130a7613051565b5b80604052505050565b60006130bb612c85565b90506130c78282613080565b919050565b600067ffffffffffffffff8211156130e7576130e6613051565b5b6130f082612d9a565b9050602081019050919050565b82818337600083830152505050565b600061311f61311a846130cc565b6130b1565b90508281526020810184848401111561313b5761313a61304c565b5b6131468482856130fd565b509392505050565b600082601f83011261316357613162613047565b5b813561317384826020860161310c565b91505092915050565b60006020828403121561319257613191612c8f565b5b600082013567ffffffffffffffff8111156131b0576131af612c94565b5b6131bc8482850161314e565b91505092915050565b6000819050919050565b60006131ea6131e56131e084612e69565b6131c5565b612e69565b9050919050565b60006131fc826131cf565b9050919050565b600061320e826131f1565b9050919050565b61321e81613203565b82525050565b60006020820190506132396000830184613215565b92915050565b600067ffffffffffffffff82111561325a57613259613051565b5b602082029050602081019050919050565b600080fd5b600061328361327e8461323f565b6130b1565b905080838252602082019050602084028301858111156132a6576132a561326b565b5b835b818110156132cf57806132bb8882612edc565b8452602084019350506020810190506132a8565b5050509392505050565b600082601f8301126132ee576132ed613047565b5b81356132fe848260208601613270565b91505092915050565b6000806040838503121561331e5761331d612c8f565b5b600083013567ffffffffffffffff81111561333c5761333b612c94565b5b613348858286016132d9565b925050602061335985828601612f48565b9150509250929050565b600067ffffffffffffffff82111561337e5761337d613051565b5b61338782612d9a565b9050602081019050919050565b60006133a76133a284613363565b6130b1565b9050828152602081018484840111156133c3576133c261304c565b5b6133ce8482856130fd565b509392505050565b600082601f8301126133eb576133ea613047565b5b81356133fb848260208601613394565b91505092915050565b6000806000806080858703121561341e5761341d612c8f565b5b600061342c87828801612edc565b945050602061343d87828801612edc565b935050604061344e87828801612e27565b925050606085013567ffffffffffffffff81111561346f5761346e612c94565b5b61347b878288016133d6565b91505092959194509250565b600080600080600060a086880312156134a3576134a2612c8f565b5b600086013567ffffffffffffffff8111156134c1576134c0612c94565b5b6134cd8882890161314e565b955050602086013567ffffffffffffffff8111156134ee576134ed612c94565b5b6134fa8882890161314e565b945050604061350b88828901612edc565b935050606061351c88828901612edc565b925050608061352d88828901612edc565b9150509295509295909350565b6000806040838503121561355157613550612c8f565b5b600061355f85828601612edc565b925050602061357085828601612edc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135c157607f821691505b6020821081036135d4576135d361357a565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613636602183612d5f565b9150613641826135da565b604082019050919050565b6000602082019050818103600083015261366581613629565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b60006136c8603d83612d5f565b91506136d38261366c565b604082019050919050565b600060208201905081810360008301526136f7816136bb565b9050919050565b60006040820190506137136000830185612ff0565b6137206020830184612ff0565b9392505050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b6000613783602d83612d5f565b915061378e82613727565b604082019050919050565b600060208201905081810360008301526137b281613776565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006137f382612e06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613825576138246137b9565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026138927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613855565b61389c8683613855565b95508019841693508086168417925050509392505050565b60006138cf6138ca6138c584612e06565b6131c5565b612e06565b9050919050565b6000819050919050565b6138e9836138b4565b6138fd6138f5826138d6565b848454613862565b825550505050565b600090565b613912613905565b61391d8184846138e0565b505050565b5b818110156139415761393660008261390a565b600181019050613923565b5050565b601f8211156139865761395781613830565b61396084613845565b8101602085101561396f578190505b61398361397b85613845565b830182613922565b50505b505050565b600082821c905092915050565b60006139a96000198460080261398b565b1980831691505092915050565b60006139c28383613998565b9150826002028217905092915050565b6139db82612d54565b67ffffffffffffffff8111156139f4576139f3613051565b5b6139fe82546135a9565b613a09828285613945565b600060209050601f831160018114613a3c5760008415613a2a578287015190505b613a3485826139b6565b865550613a9c565b601f198416613a4a86613830565b60005b82811015613a7257848901518255600182019150602085019450602081019050613a4d565b86831015613a8f5784890151613a8b601f891682613998565b8355505b6001600288020188555050505b505050505050565b7f4864734552433732313a2063616c6c6572206973206e6f7420746865206f706560008201527f7261746f72000000000000000000000000000000000000000000000000000000602082015250565b6000613b00602583612d5f565b9150613b0b82613aa4565b604082019050919050565b60006020820190508181036000830152613b2f81613af3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b9a81612e89565b82525050565b6000613bac8383613b91565b60208301905092915050565b6000602082019050919050565b6000613bd082613b65565b613bda8185613b70565b9350613be583613b81565b8060005b83811015613c16578151613bfd8882613ba0565b9750613c0883613bb8565b925050600181019050613be9565b5085935050505092915050565b60006040820190508181036000830152613c3d8185613bc5565b9050613c4c6020830184612d2a565b9392505050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b6000613c89601883612d5f565b9150613c9482613c53565b602082019050919050565b60006020820190508181036000830152613cb881613c7c565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b6000613d1b602983612d5f565b9150613d2682613cbf565b604082019050919050565b60006020820190508181036000830152613d4a81613d0e565b9050919050565b6000604082019050613d666000830185612e9b565b613d736020830184612e9b565b9392505050565b600081905092915050565b60008154613d92816135a9565b613d9c8186613d7a565b94506001821660008114613db75760018114613dcc57613dff565b60ff1983168652811515820286019350613dff565b613dd585613830565b60005b83811015613df757815481890152600182019150602081019050613dd8565b838801955050505b50505092915050565b7f312e6a736f6e0000000000000000000000000000000000000000000000000000600082015250565b6000613e3e600683613d7a565b9150613e4982613e08565b600682019050919050565b6000613e608284613d85565b9150613e6b82613e31565b915081905092915050565b7f4864734552433732313a2063616c6c6572206973206e6f7420696e205768697460008201527f656c697374000000000000000000000000000000000000000000000000000000602082015250565b6000613ed2602583612d5f565b9150613edd82613e76565b604082019050919050565b60006020820190508181036000830152613f0181613ec5565b9050919050565b7f616d6f756e74206572726f720000000000000000000000000000000000000000600082015250565b6000613f3e600c83612d5f565b9150613f4982613f08565b602082019050919050565b60006020820190508181036000830152613f6d81613f31565b9050919050565b6000613f7f82612e06565b9150613f8a83612e06565b9250828201905080821115613fa257613fa16137b9565b5b92915050565b6000613fb382612e06565b9150613fbe83612e06565b9250828202613fcc81612e06565b91508282048414831517613fe357613fe26137b9565b5b5092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61401f81612e06565b82525050565b60006140318383614016565b60208301905092915050565b6000602082019050919050565b600061405582613fea565b61405f8185613ff5565b935061406a83614006565b8060005b8381101561409b5781516140828882614025565b975061408d8361403d565b92505060018101905061406e565b5085935050505092915050565b60006060820190506140bd6000830186612e9b565b6140ca6020830185612ff0565b81810360408301526140dc818461404a565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614142602e83612d5f565b915061414d826140e6565b604082019050919050565b6000602082019050818103600083015261417181614135565b9050919050565b6000819050919050565b600060ff82169050919050565b60006141aa6141a56141a084614178565b6131c5565b614182565b9050919050565b6141ba8161418f565b82525050565b60006020820190506141d560008301846141b1565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614237602683612d5f565b9150614242826141db565b604082019050919050565b600060208201905081810360008301526142668161422a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a3602083612d5f565b91506142ae8261426d565b602082019050919050565b600060208201905081810360008301526142d281614296565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000614335602583612d5f565b9150614340826142d9565b604082019050919050565b6000602082019050818103600083015261436481614328565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143c7602483612d5f565b91506143d28261436b565b604082019050919050565b600060208201905081810360008301526143f6816143ba565b9050919050565b7f69642065786365656473206d6178696400000000000000000000000000000000600082015250565b6000614433601083612d5f565b915061443e826143fd565b602082019050919050565b6000602082019050818103600083015261446281614426565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061449f601983612d5f565b91506144aa82614469565b602082019050919050565b600060208201905081810360008301526144ce81614492565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614531603283612d5f565b915061453c826144d5565b604082019050919050565b6000602082019050818103600083015261456081614524565b9050919050565b600060608201905061457c6000830186612e9b565b6145896020830185612e9b565b6145966040830184612ff0565b949350505050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b60006145fa602b83612d5f565b91506146058261459e565b604082019050919050565b60006020820190508181036000830152614629816145ed565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061465782614630565b614661818561463b565b9350614671818560208601612d70565b61467a81612d9a565b840191505092915050565b600060808201905061469a6000830187612e9b565b6146a76020830186612e9b565b6146b46040830185612ff0565b81810360608301526146c6818461464c565b905095945050505050565b6000815190506146e081612cc5565b92915050565b6000602082840312156146fc576146fb612c8f565b5b600061470a848285016146d1565b91505092915050565b60008151905061472281612f31565b92915050565b60006020828403121561473e5761473d612c8f565b5b600061474c84828501614713565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006147b1602a83612d5f565b91506147bc82614755565b604082019050919050565b600060208201905081810360008301526147e0816147a4565b9050919050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061481d602083612d5f565b9150614828826147e7565b602082019050919050565b6000602082019050818103600083015261484c81614810565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614889601c83612d5f565b915061489482614853565b602082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061491b602683612d5f565b9150614926826148bf565b604082019050919050565b6000602082019050818103600083015261494a8161490e565b9050919050565b600081905092915050565b600061496782614630565b6149718185614951565b9350614981818560208601612d70565b80840191505092915050565b6000614999828461495c565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006149da601d83612d5f565b91506149e5826149a4565b602082019050919050565b60006020820190508181036000830152614a09816149cd565b905091905056fea2646970667358221220241637d91653f9ebd5a8cba59c145d2f0418436399c5ab5589a26875797f98bd64736f6c63430008120033