aws-sdk-core 2.0.0.rc2 → 2.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +13 -7
  3. data/.yardopts +1 -0
  4. data/Gemfile +5 -1
  5. data/README.md +26 -0
  6. data/apis/AutoScaling-2011-01-01.json +57 -0
  7. data/apis/CloudFormation-2010-05-15.json +29 -0
  8. data/apis/CloudFront-2012-05-05.json +33 -0
  9. data/apis/CloudFront-2013-05-12.json +33 -0
  10. data/apis/CloudFront-2013-08-26.json +33 -0
  11. data/apis/CloudSearch-2011-02-01.json +1 -0
  12. data/apis/CloudWatch-2010-08-01.json +22 -0
  13. data/apis/DataPipeline-2012-10-29.json +25 -0
  14. data/apis/DirectConnect-2012-10-25.json +1 -0
  15. data/apis/DynamoDB-2011-12-05.json +29 -0
  16. data/apis/DynamoDB-2012-08-10.json +29 -0
  17. data/apis/EC2-2013-06-15.json +29 -0
  18. data/apis/EC2-2013-10-01.json +29 -0
  19. data/apis/EMR-2009-03-31.json +958 -40
  20. data/apis/ElastiCache-2012-11-15.json +72 -0
  21. data/apis/ElastiCache-2013-06-15.json +72 -0
  22. data/apis/ElasticBeanstalk-2010-12-01.json +8 -0
  23. data/apis/ElasticLoadBalancing-2012-06-01.json +8 -0
  24. data/apis/ElasticTranscoder-2012-09-25.json +16 -3
  25. data/apis/Glacier-2012-06-01.json +35 -0
  26. data/apis/IAM-2010-05-08.json +129 -0
  27. data/apis/ImportExport-2010-06-01.json +9 -0
  28. data/apis/Kinesis-2013-12-02.json +409 -0
  29. data/apis/OpsWorks-2013-02-18.json +1 -0
  30. data/apis/RDS-2013-01-10.json +106 -0
  31. data/apis/RDS-2013-02-12.json +120 -0
  32. data/apis/RDS-2013-05-15.json +120 -0
  33. data/apis/Redshift-2012-12-01.json +90 -1
  34. data/apis/Route53-2012-12-12.json +27 -0
  35. data/apis/S3-2006-03-01.json +34 -0
  36. data/apis/SDB-2009-04-15.json +16 -0
  37. data/apis/SES-2010-12-01.json +8 -0
  38. data/apis/SNS-2010-03-31.json +22 -0
  39. data/apis/SQS-2012-11-05.json +1 -0
  40. data/apis/STS-2011-06-15.json +3 -1
  41. data/apis/SWF-2012-01-25.json +52 -1
  42. data/apis/StorageGateway-2012-06-30.json +15 -0
  43. data/apis/StorageGateway-2013-06-30.json +15 -0
  44. data/apis/Support-2013-04-15.json +15 -0
  45. data/apis/configuration/endpoints.json +88 -23
  46. data/apis/source/elasticmapreduce-2009-03-31.json +1529 -126
  47. data/apis/source/elasticmapreduce-2009-03-31.paginators.json +25 -0
  48. data/apis/source/importexport-2010-06-01.paginators.json +1 -0
  49. data/apis/source/kinesis-2013-12-02.json +894 -0
  50. data/apis/source/kinesis-2013-12-02.paginators.json +18 -0
  51. data/apis/source/rds-2013-01-10.paginators.json +1 -0
  52. data/apis/source/rds-2013-02-12.paginators.json +1 -0
  53. data/apis/source/rds-2013-05-15.paginators.json +1 -0
  54. data/apis/source/redshift-2012-12-01.paginators.json +1 -0
  55. data/apis/source/s3-2006-03-01.paginators.json +1 -1
  56. data/aws-sdk-core.gemspec +1 -0
  57. data/doc-src/plugins/stability.rb +1 -0
  58. data/features/glacier/client.feature +5 -0
  59. data/features/glacier/step_definitions.rb +56 -5
  60. data/features/kinesis/client.feature +18 -0
  61. data/features/kinesis/setup.rb +6 -0
  62. data/features/s3/buckets.feature +10 -0
  63. data/features/s3/objects.feature +9 -0
  64. data/features/s3/step_definitions.rb +29 -0
  65. data/lib/aws.rb +13 -2
  66. data/lib/aws/api/pagination_translator.rb +71 -0
  67. data/lib/aws/api/service_translators/glacier.rb +0 -7
  68. data/lib/aws/api/translator.rb +10 -3
  69. data/lib/aws/error_handler.rb +1 -1
  70. data/lib/aws/json/builder.rb +4 -2
  71. data/lib/aws/pageable_response.rb +230 -0
  72. data/lib/aws/plugins/glacier_checksums.rb +10 -29
  73. data/lib/aws/plugins/response_paging.rb +18 -0
  74. data/lib/aws/plugins/retry_errors.rb +3 -1
  75. data/lib/aws/plugins/s3_complete_multipart_upload_fix.rb +1 -1
  76. data/lib/aws/plugins/s3_get_bucket_location_fix.rb +9 -3
  77. data/lib/aws/plugins/signature_v4.rb +2 -1
  78. data/lib/aws/plugins/sqs_queue_urls.rb +7 -4
  79. data/lib/aws/plugins/user_agent.rb +3 -3
  80. data/lib/aws/response_handler.rb +1 -1
  81. data/lib/aws/signers/s3.rb +1 -1
  82. data/lib/aws/tree_hash.rb +69 -0
  83. data/lib/aws/version.rb +1 -1
  84. data/spec/aws/json/builder_spec.rb +12 -0
  85. data/spec/aws/pageable_response_spec.rb +195 -0
  86. data/spec/aws/plugins/retry_errors_spec.rb +13 -0
  87. data/spec/aws/plugins/signature_v4_spec.rb +65 -0
  88. data/spec/aws/plugins/sqs_queue_urls_spec.rb +41 -0
  89. data/spec/aws_spec.rb +4 -0
  90. data/spec/fixtures/operations/glacier/get_job_output.yml +23 -0
  91. data/spec/fixtures/operations/s3/get_bucket_policy.yml +8 -0
  92. data/tasks/endpoints.rake +15 -0
  93. data/tasks/handlers.rake +1 -1
  94. data/vendor/seahorse/lib/seahorse/client.rb +1 -0
  95. data/vendor/seahorse/lib/seahorse/client/base.rb +6 -0
  96. data/vendor/seahorse/lib/seahorse/client/configuration.rb +1 -1
  97. data/vendor/seahorse/lib/seahorse/client/handler_builder.rb +3 -3
  98. data/vendor/seahorse/lib/seahorse/client/handler_list.rb +2 -2
  99. data/vendor/seahorse/lib/seahorse/client/http/error.rb +17 -0
  100. data/vendor/seahorse/lib/seahorse/client/http/plain_string_io.rb +10 -0
  101. data/vendor/seahorse/lib/seahorse/client/logging/handler.rb +1 -1
  102. data/vendor/seahorse/lib/seahorse/client/net_http/handler.rb +13 -2
  103. data/vendor/seahorse/lib/seahorse/client/plugins/json_simple.rb +1 -1
  104. data/vendor/seahorse/lib/seahorse/client/plugins/operation_methods.rb +4 -2
  105. data/vendor/seahorse/lib/seahorse/client/plugins/restful_bindings.rb +9 -1
  106. data/vendor/seahorse/lib/seahorse/client/request.rb +14 -0
  107. data/vendor/seahorse/lib/seahorse/client/response.rb +8 -38
  108. data/vendor/seahorse/lib/seahorse/model/shapes/shape.rb +11 -3
  109. data/vendor/seahorse/spec/seahorse/client/configuration_spec.rb +13 -0
  110. data/vendor/seahorse/spec/seahorse/client/net_http/handler_spec.rb +6 -0
  111. data/vendor/seahorse/spec/seahorse/client/response_spec.rb +9 -63
  112. metadata +41 -3
@@ -26,6 +26,7 @@
26
26
  "Aws::Plugins::GlobalConfiguration",
27
27
  "Aws::Plugins::RegionalEndpoint",
28
28
  "Aws::Plugins::InstanceProfileCredentials",
29
+ "Aws::Plugins::ResponsePaging",
29
30
  "Aws::Plugins::Credentials",
30
31
  "Aws::Plugins::QueryProtocol",
31
32
  "Aws::Plugins::SignatureV4"
@@ -2562,6 +2563,13 @@
2562
2563
  "name": "DescribeDBEngineVersions",
2563
2564
  "http_method": "POST",
2564
2565
  "http_path": "/",
2566
+ "metadata": {
2567
+ "paging": {
2568
+ "tokens": {
2569
+ "marker": "marker"
2570
+ }
2571
+ }
2572
+ },
2565
2573
  "input": {
2566
2574
  "type": "input",
2567
2575
  "members": {
@@ -2674,6 +2682,13 @@
2674
2682
  "name": "DescribeDBInstances",
2675
2683
  "http_method": "POST",
2676
2684
  "http_path": "/",
2685
+ "metadata": {
2686
+ "paging": {
2687
+ "tokens": {
2688
+ "marker": "marker"
2689
+ }
2690
+ }
2691
+ },
2677
2692
  "input": {
2678
2693
  "type": "input",
2679
2694
  "members": {
@@ -3055,6 +3070,13 @@
3055
3070
  "name": "DescribeDBLogFiles",
3056
3071
  "http_method": "POST",
3057
3072
  "http_path": "/",
3073
+ "metadata": {
3074
+ "paging": {
3075
+ "tokens": {
3076
+ "marker": "marker"
3077
+ }
3078
+ }
3079
+ },
3058
3080
  "input": {
3059
3081
  "type": "input",
3060
3082
  "members": {
@@ -3124,6 +3146,13 @@
3124
3146
  "name": "DescribeDBParameterGroups",
3125
3147
  "http_method": "POST",
3126
3148
  "http_path": "/",
3149
+ "metadata": {
3150
+ "paging": {
3151
+ "tokens": {
3152
+ "marker": "marker"
3153
+ }
3154
+ }
3155
+ },
3127
3156
  "input": {
3128
3157
  "type": "input",
3129
3158
  "members": {
@@ -3207,6 +3236,13 @@
3207
3236
  "name": "DescribeDBParameters",
3208
3237
  "http_method": "POST",
3209
3238
  "http_path": "/",
3239
+ "metadata": {
3240
+ "paging": {
3241
+ "tokens": {
3242
+ "marker": "marker"
3243
+ }
3244
+ }
3245
+ },
3210
3246
  "input": {
3211
3247
  "type": "input",
3212
3248
  "members": {
@@ -3300,6 +3336,13 @@
3300
3336
  "name": "DescribeDBSecurityGroups",
3301
3337
  "http_method": "POST",
3302
3338
  "http_path": "/",
3339
+ "metadata": {
3340
+ "paging": {
3341
+ "tokens": {
3342
+ "marker": "marker"
3343
+ }
3344
+ }
3345
+ },
3303
3346
  "input": {
3304
3347
  "type": "input",
3305
3348
  "members": {
@@ -3431,6 +3474,13 @@
3431
3474
  "name": "DescribeDBSnapshots",
3432
3475
  "http_method": "POST",
3433
3476
  "http_path": "/",
3477
+ "metadata": {
3478
+ "paging": {
3479
+ "tokens": {
3480
+ "marker": "marker"
3481
+ }
3482
+ }
3483
+ },
3434
3484
  "input": {
3435
3485
  "type": "input",
3436
3486
  "members": {
@@ -3574,6 +3624,13 @@
3574
3624
  "name": "DescribeDBSubnetGroups",
3575
3625
  "http_method": "POST",
3576
3626
  "http_path": "/",
3627
+ "metadata": {
3628
+ "paging": {
3629
+ "tokens": {
3630
+ "marker": "marker"
3631
+ }
3632
+ }
3633
+ },
3577
3634
  "input": {
3578
3635
  "type": "input",
3579
3636
  "members": {
@@ -3696,6 +3753,13 @@
3696
3753
  "name": "DescribeEngineDefaultParameters",
3697
3754
  "http_method": "POST",
3698
3755
  "http_path": "/",
3756
+ "metadata": {
3757
+ "paging": {
3758
+ "tokens": {
3759
+ "marker": "engine_defaults.marker"
3760
+ }
3761
+ }
3762
+ },
3699
3763
  "input": {
3700
3764
  "type": "input",
3701
3765
  "members": {
@@ -3845,6 +3909,13 @@
3845
3909
  "name": "DescribeEventSubscriptions",
3846
3910
  "http_method": "POST",
3847
3911
  "http_path": "/",
3912
+ "metadata": {
3913
+ "paging": {
3914
+ "tokens": {
3915
+ "marker": "marker"
3916
+ }
3917
+ }
3918
+ },
3848
3919
  "input": {
3849
3920
  "type": "input",
3850
3921
  "members": {
@@ -3960,6 +4031,13 @@
3960
4031
  "name": "DescribeEvents",
3961
4032
  "http_method": "POST",
3962
4033
  "http_path": "/",
4034
+ "metadata": {
4035
+ "paging": {
4036
+ "tokens": {
4037
+ "marker": "marker"
4038
+ }
4039
+ }
4040
+ },
3963
4041
  "input": {
3964
4042
  "type": "input",
3965
4043
  "members": {
@@ -4064,6 +4142,13 @@
4064
4142
  "name": "DescribeOptionGroupOptions",
4065
4143
  "http_method": "POST",
4066
4144
  "http_path": "/",
4145
+ "metadata": {
4146
+ "paging": {
4147
+ "tokens": {
4148
+ "marker": "marker"
4149
+ }
4150
+ }
4151
+ },
4067
4152
  "input": {
4068
4153
  "type": "input",
4069
4154
  "members": {
@@ -4191,6 +4276,13 @@
4191
4276
  "name": "DescribeOptionGroups",
4192
4277
  "http_method": "POST",
4193
4278
  "http_path": "/",
4279
+ "metadata": {
4280
+ "paging": {
4281
+ "tokens": {
4282
+ "marker": "marker"
4283
+ }
4284
+ }
4285
+ },
4194
4286
  "input": {
4195
4287
  "type": "input",
4196
4288
  "members": {
@@ -4406,6 +4498,13 @@
4406
4498
  "name": "DescribeOrderableDBInstanceOptions",
4407
4499
  "http_method": "POST",
4408
4500
  "http_path": "/",
4501
+ "metadata": {
4502
+ "paging": {
4503
+ "tokens": {
4504
+ "marker": "marker"
4505
+ }
4506
+ }
4507
+ },
4409
4508
  "input": {
4410
4509
  "type": "input",
4411
4510
  "members": {
@@ -4519,6 +4618,13 @@
4519
4618
  "name": "DescribeReservedDBInstances",
4520
4619
  "http_method": "POST",
4521
4620
  "http_path": "/",
4621
+ "metadata": {
4622
+ "paging": {
4623
+ "tokens": {
4624
+ "marker": "marker"
4625
+ }
4626
+ }
4627
+ },
4522
4628
  "input": {
4523
4629
  "type": "input",
4524
4630
  "members": {
@@ -4687,6 +4793,13 @@
4687
4793
  "name": "DescribeReservedDBInstancesOfferings",
4688
4794
  "http_method": "POST",
4689
4795
  "http_path": "/",
4796
+ "metadata": {
4797
+ "paging": {
4798
+ "tokens": {
4799
+ "marker": "marker"
4800
+ }
4801
+ }
4802
+ },
4690
4803
  "input": {
4691
4804
  "type": "input",
4692
4805
  "members": {
@@ -4811,6 +4924,13 @@
4811
4924
  "name": "DownloadDBLogFilePortion",
4812
4925
  "http_method": "POST",
4813
4926
  "http_path": "/",
4927
+ "metadata": {
4928
+ "paging": {
4929
+ "tokens": {
4930
+ "marker": "marker"
4931
+ }
4932
+ }
4933
+ },
4814
4934
  "input": {
4815
4935
  "type": "input",
4816
4936
  "members": {
@@ -4,7 +4,11 @@
4
4
  "endpoint_prefix": "redshift",
5
5
  "regional_endpoints": {
6
6
  "us-east-1": "redshift.us-east-1.amazonaws.com",
7
- "us-west-2": "redshift.us-west-2.amazonaws.com"
7
+ "us-west-2": "redshift.us-west-2.amazonaws.com",
8
+ "eu-west-1": "redshift.eu-west-1.amazonaws.com",
9
+ "ap-southeast-1": "redshift.ap-southeast-1.amazonaws.com",
10
+ "ap-southeast-2": "redshift.ap-southeast-2.amazonaws.com",
11
+ "ap-northeast-1": "redshift.ap-northeast-1.amazonaws.com"
8
12
  },
9
13
  "service_class_name": "Redshift",
10
14
  "service_full_name": "Amazon Redshift"
@@ -18,6 +22,7 @@
18
22
  "Aws::Plugins::GlobalConfiguration",
19
23
  "Aws::Plugins::RegionalEndpoint",
20
24
  "Aws::Plugins::InstanceProfileCredentials",
25
+ "Aws::Plugins::ResponsePaging",
21
26
  "Aws::Plugins::Credentials",
22
27
  "Aws::Plugins::QueryProtocol",
23
28
  "Aws::Plugins::SignatureV4"
@@ -1506,6 +1511,13 @@
1506
1511
  "name": "DescribeClusterParameterGroups",
1507
1512
  "http_method": "POST",
1508
1513
  "http_path": "/",
1514
+ "metadata": {
1515
+ "paging": {
1516
+ "tokens": {
1517
+ "marker": "marker"
1518
+ }
1519
+ }
1520
+ },
1509
1521
  "input": {
1510
1522
  "type": "input",
1511
1523
  "members": {
@@ -1565,6 +1577,13 @@
1565
1577
  "name": "DescribeClusterParameters",
1566
1578
  "http_method": "POST",
1567
1579
  "http_path": "/",
1580
+ "metadata": {
1581
+ "paging": {
1582
+ "tokens": {
1583
+ "marker": "marker"
1584
+ }
1585
+ }
1586
+ },
1568
1587
  "input": {
1569
1588
  "type": "input",
1570
1589
  "members": {
@@ -1646,6 +1665,13 @@
1646
1665
  "name": "DescribeClusterSecurityGroups",
1647
1666
  "http_method": "POST",
1648
1667
  "http_path": "/",
1668
+ "metadata": {
1669
+ "paging": {
1670
+ "tokens": {
1671
+ "marker": "marker"
1672
+ }
1673
+ }
1674
+ },
1649
1675
  "input": {
1650
1676
  "type": "input",
1651
1677
  "members": {
@@ -1741,6 +1767,13 @@
1741
1767
  "name": "DescribeClusterSnapshots",
1742
1768
  "http_method": "POST",
1743
1769
  "http_path": "/",
1770
+ "metadata": {
1771
+ "paging": {
1772
+ "tokens": {
1773
+ "marker": "marker"
1774
+ }
1775
+ }
1776
+ },
1744
1777
  "input": {
1745
1778
  "type": "input",
1746
1779
  "members": {
@@ -1910,6 +1943,13 @@
1910
1943
  "name": "DescribeClusterSubnetGroups",
1911
1944
  "http_method": "POST",
1912
1945
  "http_path": "/",
1946
+ "metadata": {
1947
+ "paging": {
1948
+ "tokens": {
1949
+ "marker": "marker"
1950
+ }
1951
+ }
1952
+ },
1913
1953
  "input": {
1914
1954
  "type": "input",
1915
1955
  "members": {
@@ -2004,6 +2044,13 @@
2004
2044
  "name": "DescribeClusterVersions",
2005
2045
  "http_method": "POST",
2006
2046
  "http_path": "/",
2047
+ "metadata": {
2048
+ "paging": {
2049
+ "tokens": {
2050
+ "marker": "marker"
2051
+ }
2052
+ }
2053
+ },
2007
2054
  "input": {
2008
2055
  "type": "input",
2009
2056
  "members": {
@@ -2064,6 +2111,13 @@
2064
2111
  "name": "DescribeClusters",
2065
2112
  "http_method": "POST",
2066
2113
  "http_path": "/",
2114
+ "metadata": {
2115
+ "paging": {
2116
+ "tokens": {
2117
+ "marker": "marker"
2118
+ }
2119
+ }
2120
+ },
2067
2121
  "input": {
2068
2122
  "type": "input",
2069
2123
  "members": {
@@ -2307,6 +2361,13 @@
2307
2361
  "name": "DescribeDefaultClusterParameters",
2308
2362
  "http_method": "POST",
2309
2363
  "http_path": "/",
2364
+ "metadata": {
2365
+ "paging": {
2366
+ "tokens": {
2367
+ "marker": "marker"
2368
+ }
2369
+ }
2370
+ },
2310
2371
  "input": {
2311
2372
  "type": "input",
2312
2373
  "members": {
@@ -2397,6 +2458,13 @@
2397
2458
  "name": "DescribeEvents",
2398
2459
  "http_method": "POST",
2399
2460
  "http_path": "/",
2461
+ "metadata": {
2462
+ "paging": {
2463
+ "tokens": {
2464
+ "marker": "marker"
2465
+ }
2466
+ }
2467
+ },
2400
2468
  "input": {
2401
2469
  "type": "input",
2402
2470
  "members": {
@@ -2485,6 +2553,13 @@
2485
2553
  "name": "DescribeOrderableClusterOptions",
2486
2554
  "http_method": "POST",
2487
2555
  "http_path": "/",
2556
+ "metadata": {
2557
+ "paging": {
2558
+ "tokens": {
2559
+ "marker": "marker"
2560
+ }
2561
+ }
2562
+ },
2488
2563
  "input": {
2489
2564
  "type": "input",
2490
2565
  "members": {
@@ -2565,6 +2640,13 @@
2565
2640
  "name": "DescribeReservedNodeOfferings",
2566
2641
  "http_method": "POST",
2567
2642
  "http_path": "/",
2643
+ "metadata": {
2644
+ "paging": {
2645
+ "tokens": {
2646
+ "marker": "marker"
2647
+ }
2648
+ }
2649
+ },
2568
2650
  "input": {
2569
2651
  "type": "input",
2570
2652
  "members": {
@@ -2661,6 +2743,13 @@
2661
2743
  "name": "DescribeReservedNodes",
2662
2744
  "http_method": "POST",
2663
2745
  "http_path": "/",
2746
+ "metadata": {
2747
+ "paging": {
2748
+ "tokens": {
2749
+ "marker": "marker"
2750
+ }
2751
+ }
2752
+ },
2664
2753
  "input": {
2665
2754
  "type": "input",
2666
2755
  "members": {
@@ -25,6 +25,7 @@
25
25
  "Aws::Plugins::GlobalConfiguration",
26
26
  "Aws::Plugins::RegionalEndpoint",
27
27
  "Aws::Plugins::InstanceProfileCredentials",
28
+ "Aws::Plugins::ResponsePaging",
28
29
  "Aws::Plugins::Credentials",
29
30
  "Aws::Plugins::XmlProtocol",
30
31
  "Aws::Plugins::SignatureV3"
@@ -677,6 +678,14 @@
677
678
  "name": "ListHealthChecks",
678
679
  "http_method": "GET",
679
680
  "http_path": "/2012-12-12/healthcheck?marker={marker}&maxitems={max_items}",
681
+ "metadata": {
682
+ "paging": {
683
+ "tokens": {
684
+ "marker": "marker"
685
+ },
686
+ "truncated_if": "is_truncated"
687
+ }
688
+ },
680
689
  "input": {
681
690
  "type": "input",
682
691
  "members": {
@@ -764,6 +773,14 @@
764
773
  "name": "ListHostedZones",
765
774
  "http_method": "GET",
766
775
  "http_path": "/2012-12-12/hostedzone?marker={marker}&maxitems={max_items}",
776
+ "metadata": {
777
+ "paging": {
778
+ "tokens": {
779
+ "marker": "marker"
780
+ },
781
+ "truncated_if": "is_truncated"
782
+ }
783
+ },
767
784
  "input": {
768
785
  "type": "input",
769
786
  "members": {
@@ -839,6 +856,16 @@
839
856
  "name": "ListResourceRecordSets",
840
857
  "http_method": "GET",
841
858
  "http_path": "/2012-12-12/hostedzone/{hosted_zone_id}/rrset?type={start_record_type}&name={start_record_name}&identifier={start_record_identifier}&maxitems={max_items}",
859
+ "metadata": {
860
+ "paging": {
861
+ "tokens": {
862
+ "start_record_name": "next_rec||d_name",
863
+ "start_record_type": "next_rec||d_type",
864
+ "start_record_identifier": "next_rec||d_identifier"
865
+ },
866
+ "truncated_if": "is_truncated"
867
+ }
868
+ },
842
869
  "input": {
843
870
  "type": "input",
844
871
  "members": {