608060405234801561000f575f80fd5b50613caf8061001d5f395ff3fe60806040526004361061013f575f3560e01c8063635490cc116100b5578063b390c0ab1161006e578063b390c0ab1461049f578063b88d4fde146104db578063defa80c314610503578063e97ceaa81461051f578063e985e9c514610547578063fb25fb7a146105835761013f565b8063635490cc146103735780636f19951c1461039b57806370a08231146103d75780639796133614610413578063a22cb4651461043b578063a898e364146104635761013f565b80632f32f937116101075780632f32f937146102335780634182e4a31461026f57806342842e0e146102ab57806342966c68146102d357806344ec9344146102fb5780636352211e146103375761013f565b806301ffc9a714610143578063064c0a3a1461017f578063081812fc146101a7578063095ea7b3146101e357806323b872dd1461020b575b5f80fd5b34801561014e575f80fd5b5061016960048036038101906101649190612f30565b6105c1565b6040516101769190612f75565b60405180910390f35b34801561018a575f80fd5b506101a560048036038101906101a09190613157565b610762565b005b3480156101b2575f80fd5b506101cd60048036038101906101c891906131ea565b610781565b6040516101da9190613224565b60405180910390f35b3480156101ee575f80fd5b506102096004803603810190610204919061323d565b610806565b005b348015610216575f80fd5b50610231600480360381019061022c919061327b565b61090e565b005b34801561023e575f80fd5b50610259600480360381019061025491906132cb565b610929565b6040516102669190613354565b60405180910390f35b34801561027a575f80fd5b506102956004803603810190610290919061323d565b610a18565b6040516102a29190612f75565b60405180910390f35b3480156102b6575f80fd5b506102d160048036038101906102cc919061327b565b610a71565b005b3480156102de575f80fd5b506102f960048036038101906102f491906131ea565b610a90565b005b348015610306575f80fd5b50610321600480360381019061031c91906131ea565b610a9e565b60405161032e9190613442565b60405180910390f35b348015610342575f80fd5b5061035d600480360381019061035891906131ea565b610b6e565b60405161036a9190613224565b60405180910390f35b34801561037e575f80fd5b5061039960048036038101906103949190613462565b610c0d565b005b3480156103a6575f80fd5b506103c160048036038101906103bc91906131ea565b610dd1565b6040516103ce9190613442565b60405180910390f35b3480156103e2575f80fd5b506103fd60048036038101906103f891906134ce565b610ea1565b60405161040a9190613508565b60405180910390f35b34801561041e575f80fd5b50610439600480360381019061043491906132cb565b610f4b565b005b348015610446575f80fd5b50610461600480360381019061045c919061354b565b610f64565b005b34801561046e575f80fd5b50610489600480360381019061048491906132cb565b6110d6565b6040516104969190613354565b60405180910390f35b3480156104aa575f80fd5b506104c560048036038101906104c091906132cb565b6111c5565b6040516104d29190613508565b60405180910390f35b3480156104e6575f80fd5b5061050160048036038101906104fc9190613589565b6111e3565b005b61051d60048036038101906105189190613609565b611200565b005b34801561052a575f80fd5b50610545600480360381019061054091906136d6565b611225565b005b348015610552575f80fd5b5061056d6004803603810190610568919061373a565b611242565b60405161057a9190612f75565b60405180910390f35b34801561058e575f80fd5b506105a960048036038101906105a491906131ea565b6112d0565b6040516105b893929190613778565b60405180910390f35b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061068b57507f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106f357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061075b57507f42b0e56f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b8261076c816113f0565b610779868686868661143a565b505050505050565b5f61078b8261177f565b60015f8381526020019081526020015f205f6107a684610b6e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f61081082610b6e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610877576040517f0591db6d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108966117c1565b73ffffffffffffffffffffffffffffffffffffffff16141580156108c857506108c6816108c16117c1565b611242565b155b156108ff576040517f982462b200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61090983836117c8565b505050565b80610918816113f0565b6109238484846118be565b50505050565b610931612e38565b8161093b84610dd1565b5111610973576040517fca755cc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60045f8581526020019081526020015f208381548110610997576109966137ad565b5b905f5260205f2090600202016040518060400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508091505092915050565b5f8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f20541415905092915050565b610a8b83838360405180602001604052805f8152506111e3565b505050565b610a9a815f6111c5565b5050565b60605f60055f8481526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610b5f578382905f5260205f2090600202016040518060400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610ad1565b50505050905080915050919050565b5f805f80610b7b856112d0565b9250925092508015610c02578273ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b8152600401610bc09190613508565b602060405180830381865afa158015610bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bff91906137ee565b92505b829350505050919050565b610c168361177f565b5f610c1f6117c1565b9050610c2a81611b44565b610c60576040517f80275d3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60405180604001604052808581526020018373ffffffffffffffffffffffffffffffffffffffff168152509050610c99858386611b58565b5f610ca386610a9e565b5190506080811015610d3c5760055f8781526020019081526020015f2082908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610d6e565b6040517f98674b3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b848373ffffffffffffffffffffffffffffffffffffffff16877fe65085e689b77b126ba0bac3b079aa8288f19f4d5445af11c76003f8ab3075dd84604051610db69190613508565b60405180910390a4610dc9868487611b5d565b505050505050565b60605f60045f8481526020019081526020015f20805480602002602001604051908101604052809291908181526020015f905b82821015610e92578382905f5260205f2090600202016040518060400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190610e04565b50505050905080915050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f07576040517f7772286600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b81610f5581611b62565b610f5f8383611bac565b505050565b8173ffffffffffffffffffffffffffffffffffffffff16610f836117c1565b73ffffffffffffffffffffffffffffffffffffffff1603610fd0576040517f2dee66e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060025f610fdc6117c1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166110856117c1565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516110ca9190612f75565b60405180910390a35050565b6110de612e38565b816110e884610a9e565b5111611120576040517f9136d24f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60055f8581526020019081526020015f208381548110611144576111436137ad565b5b905f5260205f2090600202016040518060400160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090508091505092915050565b5f826111d0816113f0565b6111da8484611c59565b91505092915050565b816111ed816113f0565b6111f9858585856120ed565b5050505050565b8761120a81611b62565b61121a8989898989898989612140565b505050505050505050565b8361122f81611b62565b61123b85858585612383565b5050505050565b5f60025f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f805f8060035f8681526020019081526020015f206040518060600160405290815f8201548152602001600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820160149054906101000a900460ff16151515158152505090505f73ffffffffffffffffffffffffffffffffffffffff16816020015173ffffffffffffffffffffffffffffffffffffffff16036113d4576040517f89ba7e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060200151815f01518260400151935093509350509193909250565b6114016113fb6117c1565b826125c5565b611437576040517f35d12e3f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f80611445856112d0565b50915091508673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146114af576040517fe146af6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1603611514576040517fe3d91bfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614801561154e57508385145b15611585576040517f5eeb0df000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61158e86611b44565b6115c4576040517f80275d3a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff166301ffc9a77f42b0e56f000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161161d9190613828565b602060405180830381865afa158015611638573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061165c9190613855565b611692576040517ff413cf9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61169d85878661269e565b6116a88787876127f5565b6116b582878387896127fa565b60015f808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461170191906138ad565b925050819055506117158585886001612801565b60015f808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461176191906138e0565b925050819055506117768287838789886128cf565b50505050505050565b61178881612a21565b6117be576040517f89ba7e1000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f33905090565b5f6117d282610b6e565b90508260015f8481526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b5f806118c9836112d0565b50915091508473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611933576040517fe146af6f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611998576040517fe3d91bfc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6119a38585856127f5565b6119b08285835f876127fa565b60015f808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546119fc91906138ad565b92505081905550611a0f835f865f612801565b60015f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611a5b91906138e0565b92505081905550828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4828473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f04444026cefd1b05506559cab59d1b865ae3ba4ed2fe5c894f04e522776c552d845f604051611b1d929190613955565b60405180910390a4611b30858585612a8c565b611b3d8285835f87612a91565b5050505050565b5f80823f90505f801b811415915050919050565b505050565b505050565b611b73611b6d6117c1565b82612a98565b611ba9576040517f2728a9d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b8060055f8481526020019081526020015f20805490501115611bfa576040517f8ac3cb1400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c0382612b2c565b60055f8381526020019081526020015f205f611c1f9190612e66565b817f8ac4a0d65950c3e40448afb2260e2e0ec36ea15644d9b39e37e85472e5f9445160405160405180910390a2611c5582612b2f565b5050565b5f805f611c65856112d0565b50915091505f611c7486610b6e565b905060015f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254611cc291906138ad565b92505081905550611cd4815f886127f5565b611ce1835f845f8a6127fa565b611ceb5f876117c8565b611cf486612b32565b5f611cfe87610dd1565b905060045f8881526020019081526020015f205f611d1c9190612e66565b60055f8881526020019081526020015f205f611d389190612e66565b60015f8881526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555f805f835190505f5b81811015611fad57898310611e3857848181518110611dd157611dd06137ad565b5b602002602001015160200151858281518110611df057611def6137ad565b5b60200260200101515f01516040517f4cb93ad9000000000000000000000000000000000000000000000000000000008152600401611e2f92919061397c565b60405180910390fd5b60065f868381518110611e4e57611e4d6137ad565b5b60200260200101516020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f868381518110611ea757611ea66137ad565b5b60200260200101515f015181526020019081526020015f205f9055828a0393506001858281518110611edc57611edb6137ad565b5b60200260200101516020015173ffffffffffffffffffffffffffffffffffffffff1663b390c0ab878481518110611f1657611f156137ad565b5b60200260200101515f0151600188611f2e91906138ad565b6040518363ffffffff1660e01b8152600401611f4b9291906139a3565b6020604051808303815f875af1158015611f67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f8b91906139de565b611f9591906138e0565b83611fa091906138e0565b9250806001019050611daf565b5060035f8b81526020019081526020015f205f8082015f9055600182015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001820160146101000a81549060ff0219169055505061200d855f8c612a8c565b61201a875f885f8e612a91565b895f73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4895f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f04444026cefd1b05506559cab59d1b865ae3ba4ed2fe5c894f04e522776c552d895f6040516120d5929190613955565b60405180910390a48197505050505050505092915050565b6120f88484846118be565b61210484848484612b35565b61213a576040517fbcb5663700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b612148612e38565b821561215f5761215889876110d6565b905061216c565b6121698987610929565b90505b612177818686612c98565b821561219c5761219760055f8b81526020019081526020015f2087612d16565b612206565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f905561220560045f8b81526020019081526020015f2087612d16565b5b5f73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612326575f87036122af578473ffffffffffffffffffffffffffffffffffffffff166323b872dd308a876040518463ffffffff1660e01b815260040161227d93929190613a09565b5f604051808303815f87803b158015612294575f80fd5b505af11580156122a6573d5f803e3d5ffd5b50505050612325565b806020015173ffffffffffffffffffffffffffffffffffffffff1663064c0a3a308a845f01518b876040518663ffffffff1660e01b81526004016122f7959493929190613ab8565b5f604051808303815f87803b15801561230e575f80fd5b505af1158015612320573d5f803e3d5ffd5b505050505b5b838573ffffffffffffffffffffffffffffffffffffffff168a7f2bedee38cdb22411c14554191243c0e117c0088ddae3459876acd46a0fd538158987604051612370929190613b10565b60405180910390a4505050505050505050565b8261238d85610a9e565b51116123c5576040517f9136d24f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6123d085856110d6565b90506123dd818484612c98565b5f60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f205414612462576040517fff33650c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61246e85858585612e2c565b61248860055f8781526020019081526020015f2085612d16565b60045f8681526020019081526020015f2081908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050600160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8481526020019081526020015f2081905550818373ffffffffffffffffffffffffffffffffffffffff16867f29486b9e2ae569b440933a9b1b421467306fa21f3dcad439c262910a634963a9876040516125aa9190613508565b60405180910390a46125be85858585612e32565b5050505050565b5f805f6125d1846112d0565b50915091505f8114612615578173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161492505050612698565b8173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061265557506126548286611242565b5b8061269357508473ffffffffffffffffffffffffffffffffffffffff1661267b85610781565b73ffffffffffffffffffffffffffffffffffffffff16145b925050505b92915050565b5f5b60648110156127bd575f805f8573ffffffffffffffffffffffffffffffffffffffff1663fb25fb7a866040518263ffffffff1660e01b81526004016126e59190613508565b606060405180830381865afa158015612700573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127249190613b37565b9250925092508061273857505050506127f0565b3073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561277257508682145b156127a9576040517ff911968900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8295508194508360010193505050506126a0565b506040517feb20c44200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b505050565b5050505050565b60405180606001604052808481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182151581525060035f8681526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160010160146101000a81548160ff0219169083151502179055509050506128c05f856117c8565b6128c984612b32565b50505050565b5f8590508073ffffffffffffffffffffffffffffffffffffffff1663635490cc8585856040518463ffffffff1660e01b815260040161291093929190613b87565b5f604051808303815f87803b158015612927575f80fd5b505af1158015612939573d5f803e3d5ffd5b50505050612948878785612a8c565b6129558787878787612a91565b828673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4828673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f04444026cefd1b05506559cab59d1b865ae3ba4ed2fe5c894f04e522776c552d8888604051612a109291906139a3565b60405180910390a450505050505050565b5f8073ffffffffffffffffffffffffffffffffffffffff1660035f8481526020019081526020015f206001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b5050505050565b5f80612aa383610b6e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ae55750612ae48185611242565b5b80612b2357508373ffffffffffffffffffffffffffffffffffffffff16612b0b84610781565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b50565b50565b50565b5f612b3f84611b44565b15612c8b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b686117c1565b8786866040518563ffffffff1660e01b8152600401612b8a9493929190613bc3565b6020604051808303815f875af1925050508015612bc557506040513d601f19601f82011682018060405250810190612bc29190613c21565b60015b612c3b573d805f8114612bf3576040519150601f19603f3d011682016040523d82523d5f602084013e612bf8565b606091505b505f815103612c33576040517fbcb5663700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c90565b600190505b949350505050565b826020015173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580612cda5750825f01518114155b15612d11576040517f37d6ce9000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b8160018380549050612d2891906138ad565b81548110612d3957612d386137ad565b5b905f5260205f209060020201828281548110612d5857612d576137ad565b5b905f5260205f2090600202015f820154815f0155600182015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505081805480612de557612de4613c4c565b5b600190038181905f5260205f2090600202015f8082015f9055600182015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055505090555050565b50505050565b50505050565b60405180604001604052805f81526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5080545f8255600202905f5260205f2090810190612e849190612e87565b50565b5b80821115612ec6575f8082015f9055600182015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905550600201612e88565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612f0f81612edb565b8114612f19575f80fd5b50565b5f81359050612f2a81612f06565b92915050565b5f60208284031215612f4557612f44612ed3565b5b5f612f5284828501612f1c565b91505092915050565b5f8115159050919050565b612f6f81612f5b565b82525050565b5f602082019050612f885f830184612f66565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612fb782612f8e565b9050919050565b612fc781612fad565b8114612fd1575f80fd5b50565b5f81359050612fe281612fbe565b92915050565b5f819050919050565b612ffa81612fe8565b8114613004575f80fd5b50565b5f8135905061301581612ff1565b92915050565b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61306982613023565b810181811067ffffffffffffffff8211171561308857613087613033565b5b80604052505050565b5f61309a612eca565b90506130a68282613060565b919050565b5f67ffffffffffffffff8211156130c5576130c4613033565b5b6130ce82613023565b9050602081019050919050565b828183375f83830152505050565b5f6130fb6130f6846130ab565b613091565b9050828152602081018484840111156131175761311661301f565b5b6131228482856130db565b509392505050565b5f82601f83011261313e5761313d61301b565b5b813561314e8482602086016130e9565b91505092915050565b5f805f805f60a086880312156131705761316f612ed3565b5b5f61317d88828901612fd4565b955050602061318e88828901612fd4565b945050604061319f88828901613007565b93505060606131b088828901613007565b925050608086013567ffffffffffffffff8111156131d1576131d0612ed7565b5b6131dd8882890161312a565b9150509295509295909350565b5f602082840312156131ff576131fe612ed3565b5b5f61320c84828501613007565b91505092915050565b61321e81612fad565b82525050565b5f6020820190506132375f830184613215565b92915050565b5f806040838503121561325357613252612ed3565b5b5f61326085828601612fd4565b925050602061327185828601613007565b9150509250929050565b5f805f6060848603121561329257613291612ed3565b5b5f61329f86828701612fd4565b93505060206132b086828701612fd4565b92505060406132c186828701613007565b9150509250925092565b5f80604083850312156132e1576132e0612ed3565b5b5f6132ee85828601613007565b92505060206132ff85828601613007565b9150509250929050565b61331281612fe8565b82525050565b61332181612fad565b82525050565b604082015f82015161333b5f850182613309565b50602082015161334e6020850182613318565b50505050565b5f6040820190506133675f830184613327565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b604082015f8201516133aa5f850182613309565b5060208201516133bd6020850182613318565b50505050565b5f6133ce8383613396565b60408301905092915050565b5f602082019050919050565b5f6133f08261336d565b6133fa8185613377565b935061340583613387565b805f5b8381101561343557815161341c88826133c3565b9750613427836133da565b925050600181019050613408565b5085935050505092915050565b5f6020820190508181035f83015261345a81846133e6565b905092915050565b5f805f6060848603121561347957613478612ed3565b5b5f61348686828701613007565b935050602061349786828701613007565b925050604084013567ffffffffffffffff8111156134b8576134b7612ed7565b5b6134c48682870161312a565b9150509250925092565b5f602082840312156134e3576134e2612ed3565b5b5f6134f084828501612fd4565b91505092915050565b61350281612fe8565b82525050565b5f60208201905061351b5f8301846134f9565b92915050565b61352a81612f5b565b8114613534575f80fd5b50565b5f8135905061354581613521565b92915050565b5f806040838503121561356157613560612ed3565b5b5f61356e85828601612fd4565b925050602061357f85828601613537565b9150509250929050565b5f805f80608085870312156135a1576135a0612ed3565b5b5f6135ae87828801612fd4565b94505060206135bf87828801612fd4565b93505060406135d087828801613007565b925050606085013567ffffffffffffffff8111156135f1576135f0612ed7565b5b6135fd8782880161312a565b91505092959194509250565b5f805f805f805f80610100898b03121561362657613625612ed3565b5b5f6136338b828c01613007565b98505060206136448b828c01612fd4565b97505060406136558b828c01613007565b96505060606136668b828c01613007565b95505060806136778b828c01612fd4565b94505060a06136888b828c01613007565b93505060c06136998b828c01613537565b92505060e089013567ffffffffffffffff8111156136ba576136b9612ed7565b5b6136c68b828c0161312a565b9150509295985092959890939650565b5f805f80608085870312156136ee576136ed612ed3565b5b5f6136fb87828801613007565b945050602061370c87828801613007565b935050604061371d87828801612fd4565b925050606061372e87828801613007565b91505092959194509250565b5f80604083850312156137505761374f612ed3565b5b5f61375d85828601612fd4565b925050602061376e85828601612fd4565b9150509250929050565b5f60608201905061378b5f830186613215565b61379860208301856134f9565b6137a56040830184612f66565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506137e881612fbe565b92915050565b5f6020828403121561380357613802612ed3565b5b5f613810848285016137da565b91505092915050565b61382281612edb565b82525050565b5f60208201905061383b5f830184613819565b92915050565b5f8151905061384f81613521565b92915050565b5f6020828403121561386a57613869612ed3565b5b5f61387784828501613841565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6138b782612fe8565b91506138c283612fe8565b92508282039050818111156138da576138d9613880565b5b92915050565b5f6138ea82612fe8565b91506138f583612fe8565b925082820190508082111561390d5761390c613880565b5b92915050565b5f819050919050565b5f819050919050565b5f61393f61393a61393584613913565b61391c565b612fe8565b9050919050565b61394f81613925565b82525050565b5f6040820190506139685f8301856134f9565b6139756020830184613946565b9392505050565b5f60408201905061398f5f830185613215565b61399c60208301846134f9565b9392505050565b5f6040820190506139b65f8301856134f9565b6139c360208301846134f9565b9392505050565b5f815190506139d881612ff1565b92915050565b5f602082840312156139f3576139f2612ed3565b5b5f613a00848285016139ca565b91505092915050565b5f606082019050613a1c5f830186613215565b613a296020830185613215565b613a3660408301846134f9565b949350505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613a75578082015181840152602081019050613a5a565b5f8484015250505050565b5f613a8a82613a3e565b613a948185613a48565b9350613aa4818560208601613a58565b613aad81613023565b840191505092915050565b5f60a082019050613acb5f830188613215565b613ad86020830187613215565b613ae560408301866134f9565b613af260608301856134f9565b8181036080830152613b048184613a80565b90509695505050505050565b5f604082019050613b235f8301856134f9565b613b306020830184612f66565b9392505050565b5f805f60608486031215613b4e57613b4d612ed3565b5b5f613b5b868287016137da565b9350506020613b6c868287016139ca565b9250506040613b7d86828701613841565b9150509250925092565b5f606082019050613b9a5f8301866134f9565b613ba760208301856134f9565b8181036040830152613bb98184613a80565b9050949350505050565b5f608082019050613bd65f830187613215565b613be36020830186613215565b613bf060408301856134f9565b8181036060830152613c028184613a80565b905095945050505050565b5f81519050613c1b81612f06565b92915050565b5f60208284031215613c3657613c35612ed3565b5b5f613c4384828501613c0d565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffdfea26469706673582212200a29839a6aa0a87d217e0361a0d01ca91092fa252c8c2e64fed9b769ee953cba64736f6c63430008180033