diff --git a/build.gradle b/build.gradle
index ca3acc82b..218f06963 100644
--- a/build.gradle
+++ b/build.gradle
@@ -23,19 +23,20 @@ buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
- classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.1'
+ classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.0'
+ classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
+ classpath "gradle.plugin.net.ossindex:ossindex-gradle-plugin:0.2.0-beta"
}
}
plugins {
- id "com.palantir.git-version" version "0.10.0"
+ id "com.palantir.git-version" version "0.10.1"
}
allprojects {
group = 'com.spectralogic.ds3'
- version = '4.1.0'
+ version = '5.0.3'
}
subprojects {
@@ -43,6 +44,7 @@ subprojects {
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'findbugs'
+ apply plugin: 'net.ossindex.audit'
sourceCompatibility = JavaVersion.VERSION_1_8
repositories {
@@ -62,7 +64,7 @@ subprojects {
}
task wrapper(type: Wrapper) {
- gradleVersion = '4.5.1'
+ gradleVersion = '4.7'
}
project(':ds3-sdk') {
diff --git a/contract/4_0_0_contract.xml b/contract/4_0_0_contract.xml
deleted file mode 100644
index 8fd0958f5..000000000
--- a/contract/4_0_0_contract.xml
+++ /dev/null
@@ -1,17222 +0,0 @@
-
-
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.AzureTargetFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.Ds3TargetFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.GenericDaoNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.JobCompletedNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.JobCreatedNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.JobCreationFailedNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.PoolFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsCachedNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsLostNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsPersistedNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.S3TargetFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.StorageDomainFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.SystemFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.TapeFailureNotificationPayload
-
-
- com.spectralogic.s3.common.platform.notification.domain.payload.TapePartitionFailureNotificationPayload
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.9D854BF00D3B516D4045D9DBEB4B174A
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 404
-
-
-
-
-
- 1.A4F544C672FC8C11593427E560385533
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 409
-
-
-
-
-
- 1.B17329949B488995473FD573BF5A0507
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.013CF864155A896718908128F7C31E1E
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 410
-
-
-
-
-
- 411
-
-
-
-
-
- 503
-
-
-
-
-
- 1.5B99BA64EAFD43AEC9359E716A93B234
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 409
-
-
-
-
-
- 1.416E43D944A06C824AD8BF5005FA1DC3
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.46B3A42F88F14FF8E433CEF3CED4C70E
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.773E50A74C3DC9EB87D6CD924CA1B34A
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3A8DB55ED9BC0A138E7E63E96E6EF55F
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.8D18E6B210A254D12ACD074CF265700F
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 206
-
-
-
-
-
- 307
-
-
-
-
-
- 400
-
-
-
-
-
- 503
-
-
-
-
-
- 1.F50E6F8DEFB864FE89D9385A71A6C25A
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.5AB983AB4BABA77BCD64173290A741B4
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.CF182CD57551902A475553F26582BC78
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.871E6F61ED03FE40EECFD0AAD53AAA34
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.12220CAF96D6A1B3E1BC31330E95EA51
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.51D7750881DA0A4621487FFE61533D85
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 403
-
-
-
-
-
- 1.E368236F01A4B820CB381ABB9DC6A481
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 403
-
-
-
-
-
- 1.8926D009A5E919B034A8C12CC7BC6AA4
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.AB6BB38915AC1B434AA79A746AEC1CA9
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.090A514BE0B269138CD466668F79C773
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.1AF4C0F11AB88FCD30536164F07B3944
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.878704403C5B1CFAD98804ABD56AB840
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.09B5FAE5CF69BF5E945E124D60852125
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.D65ECD1D08D1272AD5E969F80235DFAC
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.0500995E51CDDBCFFC70327F12F2428F
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.C6B44D720B8BC5FEC46CEDA4EA04CA5F
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.CE89262FB9070D85EAB1C361CB74D99D
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.D561CC0BB1BDF0FCD73E2AC1509393F7
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.14A107B85D096EB8554EDB0A4A8589B9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.8A4F25C489C1E3C970CAD13B9AD4754E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 409
-
-
-
-
-
- 1.4751D97F3546F963C451CE9F9AE16C76
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 409
-
-
-
-
-
- 1.7E0B95E1E222BB82689E2AA8CD3FE344
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.4FAD1C67C3247080EFA33C224B87544D
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.8C885A22F5F8EA044A104A020AE563D5
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.0EB0673D4EFC79596617FFE680876C1F
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E697E63D8C13C0C06626E57BB95305CD
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.90CDE2CBD14856E5FDA2474704819E6B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.581382F387E3FC77A09A11F14FEB312D
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.4E2A47F1477F1A5E5D4BA9166FD13700
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 404
-
-
-
-
-
- 409
-
-
-
-
-
- 1.8D11714D318A13D76782B5A71471D887
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.00FF753915ABC8F954677D57253B3230
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.002A078CDCBEB6844EA00B0BBAC7CAC8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B27EA3CC583291FFD676193DBAA4551C
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.8E0A2BF92DD79E7C634778C97619CDEF
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1789113D83DC2E48D1B5D1C221DC1872
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.C554C793C965F9B60414FF9092DD6907
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.15D63B0FD0C4257041795BA2235277C5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 409
-
-
-
-
-
- 1.A1CF121219F77829C8480AC814898D87
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 1.74C5BC1D5C856DAC66A4AC9893FC4BB9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.B6E603A64C60859EEA83B2E687FB55AB
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.CC4C9ED25B1509ABD0F30B375ABA4D78
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.377DC47D5802F8BBB59CC5D011268847
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E3B3238A4639A19B8507203907EA2D52
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.5C597451975C08FCCE2F0647EDD16872
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.D032BD8264B23E052A900CD171273D84
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.779978550E2AC7519DBEE1B6418D7FA1
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.BD89C8ADCBAC5C96569ABC8DE7D841D9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.760344CC17CCA3AAC0D1AEAAB22664BE
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.7FE0018AE76D9D24DADF93BC83A73EF2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.9A7A0BABDD6E7CC2D134B62D158E6C57
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.8C6D05D23CDCAFBC0344FE0C91513C32
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.40C486BA0D58B76E2C253E81EB297D0E
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.18B2E9524D43E524BBB9C54ECA35E5F3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.87B1B5789ECD05E15FC0C8BFED48E73E
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B23CBBE34EDFFE1E8FBF444E4E0EA0ED
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.F85D09C772C76D466ECDE210ABD0F6E2
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D90C5C1EF5D3968AE776DED4DD4B41CA
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 409
-
-
-
-
-
- 1.4C6316BC92D7D1285A6565E212E6999E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 500
-
-
-
-
-
- 1.BA76BEF97888F20DAAB5ABAF89492E6F
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B024C098E863E2B1C9275B0EBFBA3BF6
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E7A5FD996704C81CD95CC171BA42549E
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.F51C99474F629A2CFD5CDB6BC5CB7C6D
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.FB9358D923F09B224C1272BD9B459121
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.B030FA7F19336B7B8C64BAF6E6F6346B
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.FCF1BFADC9D4DE1CF114901B69B22280
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.3970B4F7B6EEDF3D16C14B1FE8D74EA5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.FCDDCC0EE93BE92A31D4BD84C9DD57C7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.39020D24E8F55C01FF5ECC4524C78189
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.823E96C86A899E615759E3AADB7355E0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.C8788BC1989E0E16F93945C2F157893B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.0D4C916F64F122E94EEB6674D7B9F4D1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.620EF529E4CD2E0912AE9F42E2B802C0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.2F15899DE5E70055E0490AD29530C842
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.DE22EC0929BAB9F743BFC38EAB10D680
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.905EEF6FC284DC0AC05F8F1B347829C0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.BEECB5756E585359144D71D4410D4846
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B8E477B5613F3E518F79082D5552E7AC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1480092553E000D0103C80E1BC65B2C5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.B32DA5E8C42BDE53830D288C86582A9B
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.8FB599E4270D6BDE67B81DDEAACACAC8
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.1B32364BA03FED4EBBD9BEF15A49EFB1
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.F1B9C4424263D106712B36B7809F8EFC
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.782935F97E84EF7CAABC357C5CEE2271
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.F4A8A78DF6670ECDAB83A83A18D1547D
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.2C0E9739F7F0BF5B9C16B620D3C195EB
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 403
-
-
-
-
-
- 409
-
-
-
-
-
- 1.8611905E16872C3EEFC979239C47CFFE
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.D6C48865C0991834DDDE193AB40E04EA
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 403
-
-
-
-
-
- 1.5A1DF310850382BEEFC771A9C1DECC3D
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.33DEA650BE9ABCDCDF53E462D402DAFE
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.E434ED8B2A34F104A95442717B1A4BA7
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.25BA53F39517497CBFEC02F6F1A1281D
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.02D9D53D22A0F5B6893643EE40ADB324
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.ABED6B8929079AC01A596C9E4C08CBF8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.CA6D598467AAD4083472C11E72F28A8A
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 1.03E8ABF4920FE0C59B424EEDB8001FAB
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.3289F9FD0E9ACCD50787DB1A0055712D
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 404
-
-
-
-
-
- 1.4DB23DDC56235578526ECD74A1E1D151
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.278BB8E0110D66EDACF595107C09427A
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.5787086FAAD0AEFD6965BE9007AEF32F
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.F66A4CBE1684496D395E5546FEB8C8B8
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.EDC1DDE6748591464113649924079D39
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.5A6D3D3A60E77AC626275AF623C4C766
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.C079F9483A04E55B04DBB93A82435427
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1212DC6708EBC50394B744582FAA65B4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 500
-
-
-
-
-
- 12.7853EE12A10929010211D370E4E9FCB8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 13.33017D3F34393D367E5E63FB7F1DEB3E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.1AA08A21610BD902ED2A0BFDBB145B9C
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.5F29580D0FA9D13D4F31F6FA1479253C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.BE9B123D699A33A084C657EDA216FD46
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.366B50C862A74986AFC2A1FD9AFA0DC8
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.2CB8F6FD0FD4AAB2DBFDA3B66906F811
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.82806C1E451AD1325DD45123292E6360
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.AF1AD1BB3EE186EBC9E967F37EF47B63
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.81935DED0B11C2F6579420B1D503F846
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.96AA26481EDB1492BF1A4696FB4A5E90
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 409
-
-
-
-
-
- 410
-
-
-
-
-
- 12.E85F3447509D8658DC4747BDBC1124AE
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 12.D2E1E5F53C787AAE87CD6C64E57DF392
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.5441D6DB77E32465283AFFCD70BF0BD9
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A91ACBDE9427D4617DBA938B01FD4A65
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.46852EDC36DDDB68792432241EBAB228
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 1.8DD6A5CAEBA22CCE74B380322FB5EDD6
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 204
-
-
-
-
-
- 1.6F544A6CED02468AF923384632138561
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.A1093E63522E0D37459A3DD2ED4BA382
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.381372DCEE1323BA3EC6135F28BD40E7
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 411
-
-
-
-
-
- 1.B66BD19B24CA38C77915186CAC7278FB
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.61F4F2C6BB6C6B6682D36487830BB9DC
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 402
-
-
-
-
-
- 1.5A3E7F31249938D514C56E364FC6D02F
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6DAEDCFBF2E71F76371CDB2DE03FB216
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.4EB20E46D4C9A9D1A9C832A10416B269
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D6574E9F317A632E897CC1497A014EE7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.2963DE5A15B7A94AE018A555B04855E3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.BA2D594EAC2171E3CD66A1E4B261C157
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 403
-
-
-
-
-
- 1.F6F99FB1D96FAAB52761A4A6F9C007F4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.4493BC861FFB54D0474875CDA923917F
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.BCDE69D118A54DB3850A7A1DCB9044A5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.B9B14FD95B7365854A4873C9E03CF714
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.CB59926ABCCE409B8DA620D7098051EF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.8A412C738BCEA2E768EEE5AFA91A02E3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.F58DEB2156F89FEFF73AA296FB996076
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.6D9C05CCD6FC973CEC7EC06B2852C004
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.D2F89CEFD1D076C722E383CD47F54B0E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.C3E90840E58C0ED58DE5285F1C629007
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.697EEA5D819D1CCED8356F3707A80CC0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.F8EE6F2C578B71C30A5818323B8C63DD
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.CEC966DCE333C324697D8D2C014D5844
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.F75FB6B03E5778971F18B3E156F1C368
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.FB37D5236F8B9FAA3C23E1E1ED75EF7B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.BF2D067D7C365D5CD381837F5376FBCC
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.1DCB7A5A19D0073AB4C529DE68EFF590
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.AE62860962CCA944FDE6BA7A1FA29BE8
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.74228C20E21299810A61BDC1D72981CB
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.5A5F6DB8F16E8BA2850BBC9786BF933A
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.9B0188827522EB7EEF626D5957F16EF7
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.057E27FF0C7515839363635ABD87011B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.815B2098111720A02816432FD0B11263
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.F17A1AE113B6FD07741496A307004005
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.3FD065CF09A9346481021BC207729FC8
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 403
-
-
-
-
-
- 1.67E8651E0A9719E5AA68ED2783076E40
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E7E2388B6F0182AA8B191836FDC2EF46
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.0B3D7131A8DE08F23DD8F92E4FB445CE
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E016A3B10B9E2BCFBDC052B607BEF218
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.405BE0983E37E87E48E0D549DFFD22CD
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D55B0B0605B4BF3AE32149CAD90110CE
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.89699929828B8EC5AE4F1F41003A1293
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.02BC732C912E22F368101E336487D192
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.58AA7409654D5D50B6B8F55539C0774B
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6B1CA505E2302A04F63AA27099F0FCFF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.96BE833135E4A5C8F7DE52803D85CCA1
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3FB901D98106C97ED02FBD2FCB72A368
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.06D8300D0336BED673A20EF70C44CCCF
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.C9293362A29ABB99EA2382C6B71D0649
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.351B871DFA1717273590632B38A4EBC7
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.6DFABCE265B2455CBE17C12CF01CDDD2
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.C4D2CFB128128AFB2C46656E3EE693BB
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.9222B04244CF97705F3488EE7906FC41
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.AA0AD23B2F046B29AA8947581FDFB860
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D74722063AC27B6ECB815A78C0E790C5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E5ACD5AF9B1F02DDDF00504737297CFD
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.8E55D6D6105C140A17D3438C4F4D8D54
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.86F306440C4799F14DD5F4C0719E507C
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.301D82C48DB6624F74A9A6BD309A9E40
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.098207A6680442B3FA9643BB23CB370E
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.0EC16E3818F17C785ABB022A34A7A083
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.F1ED654859180EBA33AD4697444A2636
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.84A39C5D428089EF64F5DB0558FA2C45
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.4C47E15164EB0479D97A05D6AF22162F
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.BEEFBBCACF4A979C567F1D144C04067C
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.51440FCFF3ADF3834C5500FF554FFBE2
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.70D55191E13B0C77A5FF57DA126E0849
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 1.6B1C8916BB856B9EEF24DE4CB561989B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1F6F3DD14D68AD328398FA0C8C1BA523
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.8677D16DE53C2800647C7DB609C6EE44
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.67D1B7BB3E64E9C05C62F59054DF73DE
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.867574E65E9156E31D51517D17DDE283
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.833E8B67365C5B36D6B3E2C048660EEB
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E7BF64005D511F7DF092A1FD63CAFDB2
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6DA60D3A441DEB83245CF9390DB652C2
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.FCB7A1CCECDBFE60B9F9268A4DA13E64
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.5EDB52181C6563D67BB04B9F6F9FFCB3
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.602C9239FB1B18A48D8E6AB920F9865E
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.613F01620D33F44F7F08DAD27477860D
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.B3F196534F6B3239F608E60F46CC5054
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.9395090644FD6A9EEDE620F2EDB2659C
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.51360490B8BC0FEA841584D3A7941DA9
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.21D484F75EB67BB6E52299CFE9026E8C
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.B470C7165F3CC8ED799ED4F8B5BAEA45
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.C56316687F31CD493F7064FD951EC99C
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.79EEE017A84D0C323D68CA23A8CB1076
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A4AFD3D5DA908492647C739E941CC97C
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.EF17F568146C914F8023380045758F9C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3D539F4D333D3240C489C26EC0A011EF
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B0E4F8E2EF4C7507621D37BF97395F31
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A426A6A86571D4DB76768FBF9E3540DF
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.BB0DDF53B3466065E0CC36A0EDFF2834
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.033F928F2F6A0DE70086DFE3C999B9B6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.C21A692F9E87799AB2806A96B545C0C6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6B887FD15AF647C5F0ED993C439A0EE0
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 409
-
-
-
-
-
- 1.28359B909678D42A4868FB82F28934BB
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.486CB0412BAD44C82290FBD64DEC1F6D
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 404
-
-
-
-
-
- 1.C2B1E38A255F67B820C6DB2C5A021FC5
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.AA7061BA6F294ACDB2FA2282E0742BCC
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A5E2220D36BE184AE56CCD3CFC42D0AE
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.F6BC5F562CC7CDDF11632321B21D97DF
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.97CAA19C72182CEF847821F9E6FB3AAA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.3B8F9F9CA8F1879985BF29BF5CBD21E6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.019396D4D4686224FF7C3CB6D1E0C0FF
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.56E9BDA78930F90CD41C280B94F3EC92
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.A7B51CF0108CAE7FF2ED2ECFEEF990D9
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.02F4797EB106FFD0157EC4EAB8FBB3BC
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6D17F999F7BD299E10604D67FB269746
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.FC523C8224CB7FBABCF213D5D951CB18
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.0647B93684A5AF9B4EF9AAFC7148E0C7
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.04BA526681D926E6F55834C3FF14C800
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.C7CE8CF71088F3DB585CD3B02AD6C01E
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.C784129AA41D66504348A3879B18409C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 409
-
-
-
-
-
- 1.B3C891ADBE07985D8EB07F47AD5B9DA9
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.574C8D1B7983E679131E37FD5C3DF1B3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.75E4BA966FFC501D192F53E91B7DA97C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.CB9A35E0D20D8F23F42BE689119E06FA
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D7B16FCF4CB54A4DDD0B7B96965B0C89
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6C78CB68979C1B30B65792A51C4909B4
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 503
-
-
-
-
-
- 1.1425C7EF3EB1C555EEDB3A7B83959C18
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.6C71667DFCE4EFE9D2D594675F5D0548
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3FA058A0E73CD716458E4AD473D01D8E
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.7A7A1F423942BCD065A53F5E2C08CA10
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.686D026F4E37237A3FB0CFDDADBC9F8A
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.285B3B8B3249390AC0EA62095620648D
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.483EDC95D9050419855BB2C9B7D9395A
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.57134A2893313DE704198EED54D5B6E6
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.9193C0F29388C5B9B6583A6BF6C2B347
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.424FC52414BFE0A49B6746D5DB1256AB
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.13C8280BFD2D49B31E703A6C942A14BB
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.2ED8A733A34F7268A165FCB3C4DE0232
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.BCD510DF25513B8FAF0352336F094053
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.D24D24F09DCA78579C08ADE1D5528A18
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.388A14B11DC4161D76E7BA3524CED336
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.E8ECE9BA39F0B03F8394B4AB5065B60D
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.67C819CC3E37319CB3D533A2D31F00D7
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.7A9D46F2B10E01B201BD25BF3DA3E3D6
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.466E11BA31409FC6549BB27A0C1400CC
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.5458586BDBC05CE6DC7B96FB305E279E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 400
-
-
-
-
-
- 1.D07A22B79C602A5E8C570C5E049FD7AB
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.0AE60BB682E75CC3CB3CE074995267EF
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.EF0CC59153D7673ED206E0F310880A6E
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.D946E977B16DE185BC7065F3C36BBA94
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.6758EF1C334FA94EC51F836A229DFFCA
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D96F1DC7CD390C447BBA6A55F52476AC
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.74729E8767FC62D9F49C309DA2993DE6
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D9690323F9BD00A1D7AC14D449C5C5F5
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.2BDEFEC679C5FBAF0D8D2934FE55F708
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 404
-
-
-
-
-
- 1.2ADB64C9DC3241D0FFE93910210E1FF9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.12337E3CF98F2E0E44AEB002441C4918
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.F0DCE0BD19F895084F3C461358ABB31B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.362B98FD68A372E063F679FC32F89B31
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.CB7932D0E8A306C5A2E35C8916C0E4B4
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E62DED290400027E754EB45DBAC5062D
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.DBBD22390D6F477450A6966FDA2CA298
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.FED65C1D6BB97C21B4F9DA0B7A997D35
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.44F69227AF5D5C013E4E8870692550C7
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.6B2469AA8D0FC2655F6EB394348EB437
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A0A9BFEABE8E3C638E51660CF67D0B3C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 500
-
-
-
-
-
- 1.0BFC9FE27D3A590769329D70A0E2E872
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.D86253165E5E58A4859699AF6C04C146
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.DB420EA069BBE1730C24DC9EDA476595
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.31CBB28C0277768C8BF04A6CF1BA98A5
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.E6B45FD1B7595DCC123636DD01E50D8A
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 409
-
-
-
-
-
- 1.AD707ECC69A1E835FADE9B7B896C7C53
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.2EC7C7222330CC8A26AD23348C22DFBD
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.304855C6B7C0744B1F4E23991BD4CF83
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.94A9B934CC18AB22E125F70FBB9F82DE
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.038E34A9C374FC176986FC568A165527
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.CA5A1C1C65E431A37F3207B81767774B
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.7D48EAAB19465D9008EFE5C6E3C020EA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3669C6C2F1550E1554DB9CF129DCD965
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 207
-
-
-
-
-
- 1.A6D31BBFAFCCC9A55B9FEBF72E1C2953
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.32E4082ED243CB134EA743FF78000BD5
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.38E575DC2AF4B7D7CF3203E6B7BDA74D
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.220648A0923367BC4FA2794FA4BE4591
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.38448C20E04942C66F6D9AB3169CEF09
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.B7BB4C29193AC92DB35E9E206A01E30D
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.4D5F15EE9801D7E3BE0892FD38AFDE0D
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E062F9FB6D3FA8A9EEE31C6A81CC6604
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.78F8ED04EC79A126AEADE8C08B0E4F97
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.958F111DBDA1BCE46EFBC10511A145E9
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1E72B20786B3BFB6DE896C380864C4ED
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A62A0E7E1808EED079989D04772B6CB6
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.65E7DE349575885F8EC2E78FFBBD3484
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.17A61EEDF79D76747BE37B3DA3F698DF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.F0EE6E4715A3D2CFB1F5795EA52EF0A1
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.59DE4FDFB535F952488C8C76082D1957
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E8DD94F2A92ABC73D6632A48722BDF66
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 409
-
-
-
-
-
- 1.83B487198471CDEAF5C95D371BE1227E
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.B13DC16C4369B842DD1580DFC9A23E90
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 1.D9B3DB52DF8218B45D48BECB5131915E
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.CF52BFFDF3E12D43EFD5F614833B7DCE
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.FF43777C8C33E41102BCF3F2A2A90C64
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.7B3676D45CECCC1D12D71EBA722FFF30
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.71B0E6E68AA99863BE55E1D6D037301B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.9F2F0F9EE78721BF80AD83701F9736A0
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.680A6E46ADDF391752A3A89F95D73448
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.496A9334045EC97BFFE3A5116694FF85
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.BC1C6F682219387D81896AD542BFDA1B
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.21E756DE8577C5778B49EB14777DE712
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.9066576F0656AE6BA8E13A019F6A59AB
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.444CF76C0D4A6C4E637033A4D4E9126A
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.3BFB533872841D46A011D369D3FF2977
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 409
-
-
-
-
-
- 1.3426C46B6878DDEC0DA8DA6A0D5554AA
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.068DA432A58C3D7331CA5C906158F229
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.B316331E65CCB79F118C8A178C4D1112
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.27B9DEC971AF1E0443505F6381B2C647
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.F528AE4144225E113F7B00825EE52AA2
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.8D68C314C554FFCC800097F48EA2B2BF
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.B29CE6CAE05044347C6F6D2CD82D2B76
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.0EDA4B68A5E0A7A119DF093167A9643B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.25F94118327D5D07CF4BD4214EE33EC0
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.AD3D66C9BD4CFDABA55559C35CECD9E1
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.E336292FC529AF487A9AD66216D49654
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.673FA4C32058D8D329E1630ADA8E73C1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.B74A7AA44043A326AC2D7D7934967B14
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.75F9BD52CF2A252C3696A912624AF4E7
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.1568E0AA2E38BC533DF1D9A3C26D9A80
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.DA7E3AB4DC966A21CCA466E87760769B
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.AF491ABBC242A023D510DB3FEFC8D333
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.D0BF3B5963590A886B4DECEFF9D5DA2C
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.F09CDCAD633DBE0BD4D81B4ACD40F402
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 409
-
-
-
-
-
- 1.4F8C9F278402E6FB2E4EA057B834CC73
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.251760D30B95DDFD686CF5F8DD244B34
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 409
-
-
-
-
-
- 1.0FC6240C9AA47CA11A06C45AF5EED527
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.AA72044B9C3357E0774AADA4EF555CC6
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 409
-
-
-
-
-
- 500
-
-
-
-
-
- 1.6BCFED905208FF2C3021E49E1113053C
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 500
-
-
-
-
-
- 1.E7E6381C3DCFF65F04EFF2E13C486B02
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 404
-
-
-
-
-
- 1.BCF75A4FA6D197563529575007325A9D
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 404
-
-
-
-
-
- 1.4D283CDE0658BDE321C6C7B4CFB00DB5
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 400
-
-
-
-
-
- 1.6D32416F86CAE6372CEE63F13A13B4CE
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 403
-
-
-
-
-
- 1.E49AE7C4E4606611A2264F17092383DE
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.AF255C11E7836E705C16FB2E0C5C5893
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.EDD41D719CF5C94BEBC543ED4E1FA92B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.87C46F7702591A04073B685E3DCA18E8
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.DF34657F1F638BF55CCB59D8766A7A40
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.227468E94768C87DC18B9D82AE1DD73A
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.A11EBAEA1FB195A00CA8C77DAA86896E
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.ED42C99A3F7707AE33EA46D9155ACF67
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.CB843F4F8FA5F1FD7A435EF77E9AB382
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.55C741CC9A0D6215D57FB954E57DBF9E
-
-
-
-
-
-
-
-
- 200
-
-
-
-
-
- 1.A37E5119D3567CC0420518DD48F43AC6
-
-
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 1.14B1920F8A49D1721022BDA3054DF8EB
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 1.BB98871AF82585B0C646B6954309CBC3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 201
-
-
-
-
-
- 400
-
-
-
-
-
- 403
-
-
-
-
-
- 1.6D706AB11308B480CF5A83510CFA437B
-
-
-
-
-
-
-
-
- 204
-
-
-
-
-
- 404
-
-
-
-
-
- 1.EA981FC342B0BC7143D8A6B5C650CBA3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/contract/5_0_x_contract.xml b/contract/5_0_x_contract.xml
new file mode 100644
index 000000000..156449ff5
--- /dev/null
+++ b/contract/5_0_x_contract.xml
@@ -0,0 +1,17641 @@
+
+
+
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.AzureTargetFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.Ds3TargetFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.GenericDaoNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.JobCompletedNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.JobCreatedNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.JobCreationFailedNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.PoolFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsCachedNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsLostNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.S3ObjectsPersistedNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.S3TargetFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.StorageDomainFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.SystemFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.TapeFailureNotificationPayload
+
+
+ com.spectralogic.s3.common.platform.notification.domain.payload.TapePartitionFailureNotificationPayload
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.9D854BF00D3B516D4045D9DBEB4B174A
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.A4F544C672FC8C11593427E560385533
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.B17329949B488995473FD573BF5A0507
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.013CF864155A896718908128F7C31E1E
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 409
+
+
+
+
+
+ 410
+
+
+
+
+
+ 411
+
+
+
+
+
+ 503
+
+
+
+
+
+ 1.5B99BA64EAFD43AEC9359E716A93B234
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.416E43D944A06C824AD8BF5005FA1DC3
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.2ADEBFA66BD7C8629539A7399BD3A755
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3303E206BA09EA57A94B52B6205C4782
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.032AD615FE7006F89222B5D50F080D6A
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.8D18E6B210A254D12ACD074CF265700F
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 206
+
+
+
+
+
+ 307
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.9E10AB31443900A845A6A64AACDA46A8
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.5AB983AB4BABA77BCD64173290A741B4
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.CF182CD57551902A475553F26582BC78
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.871E6F61ED03FE40EECFD0AAD53AAA34
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.12220CAF96D6A1B3E1BC31330E95EA51
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.51D7750881DA0A4621487FFE61533D85
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.E368236F01A4B820CB381ABB9DC6A481
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.8926D009A5E919B034A8C12CC7BC6AA4
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.AB6BB38915AC1B434AA79A746AEC1CA9
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.090A514BE0B269138CD466668F79C773
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.1AF4C0F11AB88FCD30536164F07B3944
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.878704403C5B1CFAD98804ABD56AB840
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.09B5FAE5CF69BF5E945E124D60852125
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.D65ECD1D08D1272AD5E969F80235DFAC
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.0500995E51CDDBCFFC70327F12F2428F
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.C6B44D720B8BC5FEC46CEDA4EA04CA5F
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.CE89262FB9070D85EAB1C361CB74D99D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.D561CC0BB1BDF0FCD73E2AC1509393F7
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.14A107B85D096EB8554EDB0A4A8589B9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.8A4F25C489C1E3C970CAD13B9AD4754E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.4751D97F3546F963C451CE9F9AE16C76
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.7E0B95E1E222BB82689E2AA8CD3FE344
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.4FAD1C67C3247080EFA33C224B87544D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.8C885A22F5F8EA044A104A020AE563D5
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.0EB0673D4EFC79596617FFE680876C1F
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.E697E63D8C13C0C06626E57BB95305CD
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.90CDE2CBD14856E5FDA2474704819E6B
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.581382F387E3FC77A09A11F14FEB312D
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.4E2A47F1477F1A5E5D4BA9166FD13700
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.8D11714D318A13D76782B5A71471D887
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.00FF753915ABC8F954677D57253B3230
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.002A078CDCBEB6844EA00B0BBAC7CAC8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B27EA3CC583291FFD676193DBAA4551C
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.8E0A2BF92DD79E7C634778C97619CDEF
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.1789113D83DC2E48D1B5D1C221DC1872
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.55EDBA2263ACFB0785E441FF2A58B924
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.15D63B0FD0C4257041795BA2235277C5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.A1CF121219F77829C8480AC814898D87
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.7EA25AF7C646BCB2F9BDF8736B50093C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.B6E603A64C60859EEA83B2E687FB55AB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.CC4C9ED25B1509ABD0F30B375ABA4D78
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.377DC47D5802F8BBB59CC5D011268847
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.E3B3238A4639A19B8507203907EA2D52
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.5C597451975C08FCCE2F0647EDD16872
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.D032BD8264B23E052A900CD171273D84
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.779978550E2AC7519DBEE1B6418D7FA1
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.BD89C8ADCBAC5C96569ABC8DE7D841D9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.760344CC17CCA3AAC0D1AEAAB22664BE
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.7FE0018AE76D9D24DADF93BC83A73EF2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.9A7A0BABDD6E7CC2D134B62D158E6C57
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.8C6D05D23CDCAFBC0344FE0C91513C32
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.40C486BA0D58B76E2C253E81EB297D0E
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.18B2E9524D43E524BBB9C54ECA35E5F3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.87B1B5789ECD05E15FC0C8BFED48E73E
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B23CBBE34EDFFE1E8FBF444E4E0EA0ED
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.F85D09C772C76D466ECDE210ABD0F6E2
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D90C5C1EF5D3968AE776DED4DD4B41CA
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.4C6316BC92D7D1285A6565E212E6999E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 500
+
+
+
+
+
+ 1.8AB4C4419A05BBB45CC2EEEFE10CAA82
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B024C098E863E2B1C9275B0EBFBA3BF6
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E7A5FD996704C81CD95CC171BA42549E
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.F51C99474F629A2CFD5CDB6BC5CB7C6D
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.FB9358D923F09B224C1272BD9B459121
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.B030FA7F19336B7B8C64BAF6E6F6346B
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.FCF1BFADC9D4DE1CF114901B69B22280
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.3970B4F7B6EEDF3D16C14B1FE8D74EA5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.FCDDCC0EE93BE92A31D4BD84C9DD57C7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.39020D24E8F55C01FF5ECC4524C78189
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.823E96C86A899E615759E3AADB7355E0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.C8788BC1989E0E16F93945C2F157893B
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.0D4C916F64F122E94EEB6674D7B9F4D1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.620EF529E4CD2E0912AE9F42E2B802C0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.2F15899DE5E70055E0490AD29530C842
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.DE22EC0929BAB9F743BFC38EAB10D680
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.905EEF6FC284DC0AC05F8F1B347829C0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.BEECB5756E585359144D71D4410D4846
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B8E477B5613F3E518F79082D5552E7AC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.1480092553E000D0103C80E1BC65B2C5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.B32DA5E8C42BDE53830D288C86582A9B
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.FD0CCCBDAB885F5E5C8D9BD9DA12B9CE
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.1B32364BA03FED4EBBD9BEF15A49EFB1
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.F1B9C4424263D106712B36B7809F8EFC
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.782935F97E84EF7CAABC357C5CEE2271
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.F4A8A78DF6670ECDAB83A83A18D1547D
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.2C0E9739F7F0BF5B9C16B620D3C195EB
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 403
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.8611905E16872C3EEFC979239C47CFFE
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.D6C48865C0991834DDDE193AB40E04EA
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.5A1DF310850382BEEFC771A9C1DECC3D
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.33DEA650BE9ABCDCDF53E462D402DAFE
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.E434ED8B2A34F104A95442717B1A4BA7
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.25BA53F39517497CBFEC02F6F1A1281D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.02D9D53D22A0F5B6893643EE40ADB324
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.ABED6B8929079AC01A596C9E4C08CBF8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.CA6D598467AAD4083472C11E72F28A8A
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.03E8ABF4920FE0C59B424EEDB8001FAB
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.3289F9FD0E9ACCD50787DB1A0055712D
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.4DB23DDC56235578526ECD74A1E1D151
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.278BB8E0110D66EDACF595107C09427A
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.5787086FAAD0AEFD6965BE9007AEF32F
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.F66A4CBE1684496D395E5546FEB8C8B8
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.EDC1DDE6748591464113649924079D39
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.5A6D3D3A60E77AC626275AF623C4C766
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.C079F9483A04E55B04DBB93A82435427
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.1212DC6708EBC50394B744582FAA65B4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 500
+
+
+
+
+
+ 12.7853EE12A10929010211D370E4E9FCB8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 13.33017D3F34393D367E5E63FB7F1DEB3E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.1AA08A21610BD902ED2A0BFDBB145B9C
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.5F29580D0FA9D13D4F31F6FA1479253C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.BE9B123D699A33A084C657EDA216FD46
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.366B50C862A74986AFC2A1FD9AFA0DC8
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.2CB8F6FD0FD4AAB2DBFDA3B66906F811
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.82806C1E451AD1325DD45123292E6360
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.AF1AD1BB3EE186EBC9E967F37EF47B63
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.81935DED0B11C2F6579420B1D503F846
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.96AA26481EDB1492BF1A4696FB4A5E90
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 409
+
+
+
+
+
+ 410
+
+
+
+
+
+ 12.E85F3447509D8658DC4747BDBC1124AE
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 12.D2E1E5F53C787AAE87CD6C64E57DF392
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.5441D6DB77E32465283AFFCD70BF0BD9
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A91ACBDE9427D4617DBA938B01FD4A65
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.46852EDC36DDDB68792432241EBAB228
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.8DD6A5CAEBA22CCE74B380322FB5EDD6
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.6F544A6CED02468AF923384632138561
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.0D522E432703A7E48DBEDD1A6BB5CEF8
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.A1093E63522E0D37459A3DD2ED4BA382
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.381372DCEE1323BA3EC6135F28BD40E7
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 411
+
+
+
+
+
+ 1.B66BD19B24CA38C77915186CAC7278FB
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.61F4F2C6BB6C6B6682D36487830BB9DC
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 402
+
+
+
+
+
+ 1.5A3E7F31249938D514C56E364FC6D02F
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6DAEDCFBF2E71F76371CDB2DE03FB216
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.4EB20E46D4C9A9D1A9C832A10416B269
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D6574E9F317A632E897CC1497A014EE7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.2963DE5A15B7A94AE018A555B04855E3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.BA2D594EAC2171E3CD66A1E4B261C157
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.F6F99FB1D96FAAB52761A4A6F9C007F4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.4493BC861FFB54D0474875CDA923917F
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.BCDE69D118A54DB3850A7A1DCB9044A5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.B9B14FD95B7365854A4873C9E03CF714
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.CB59926ABCCE409B8DA620D7098051EF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.8A412C738BCEA2E768EEE5AFA91A02E3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.F58DEB2156F89FEFF73AA296FB996076
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.6D9C05CCD6FC973CEC7EC06B2852C004
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.D2F89CEFD1D076C722E383CD47F54B0E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.C3E90840E58C0ED58DE5285F1C629007
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.697EEA5D819D1CCED8356F3707A80CC0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.F8EE6F2C578B71C30A5818323B8C63DD
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.CEC966DCE333C324697D8D2C014D5844
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.F75FB6B03E5778971F18B3E156F1C368
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.FB37D5236F8B9FAA3C23E1E1ED75EF7B
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.BF2D067D7C365D5CD381837F5376FBCC
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.1DCB7A5A19D0073AB4C529DE68EFF590
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.AE62860962CCA944FDE6BA7A1FA29BE8
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.74228C20E21299810A61BDC1D72981CB
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.5A5F6DB8F16E8BA2850BBC9786BF933A
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.9B0188827522EB7EEF626D5957F16EF7
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.057E27FF0C7515839363635ABD87011B
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.815B2098111720A02816432FD0B11263
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.F17A1AE113B6FD07741496A307004005
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.3FD065CF09A9346481021BC207729FC8
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.67E8651E0A9719E5AA68ED2783076E40
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E7E2388B6F0182AA8B191836FDC2EF46
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.0B3D7131A8DE08F23DD8F92E4FB445CE
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E016A3B10B9E2BCFBDC052B607BEF218
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.405BE0983E37E87E48E0D549DFFD22CD
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D55B0B0605B4BF3AE32149CAD90110CE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.89699929828B8EC5AE4F1F41003A1293
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.02BC732C912E22F368101E336487D192
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.58AA7409654D5D50B6B8F55539C0774B
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6B1CA505E2302A04F63AA27099F0FCFF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.96BE833135E4A5C8F7DE52803D85CCA1
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3FB901D98106C97ED02FBD2FCB72A368
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.06D8300D0336BED673A20EF70C44CCCF
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.C9293362A29ABB99EA2382C6B71D0649
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.351B871DFA1717273590632B38A4EBC7
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.6DFABCE265B2455CBE17C12CF01CDDD2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.C4D2CFB128128AFB2C46656E3EE693BB
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.9222B04244CF97705F3488EE7906FC41
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.AA0AD23B2F046B29AA8947581FDFB860
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D74722063AC27B6ECB815A78C0E790C5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E5ACD5AF9B1F02DDDF00504737297CFD
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.8E55D6D6105C140A17D3438C4F4D8D54
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.86F306440C4799F14DD5F4C0719E507C
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.301D82C48DB6624F74A9A6BD309A9E40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.098207A6680442B3FA9643BB23CB370E
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.0EC16E3818F17C785ABB022A34A7A083
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.F1ED654859180EBA33AD4697444A2636
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.84A39C5D428089EF64F5DB0558FA2C45
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.4C47E15164EB0479D97A05D6AF22162F
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.D65C68901F23BADFA697712B7F496D8B
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.51440FCFF3ADF3834C5500FF554FFBE2
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.70D55191E13B0C77A5FF57DA126E0849
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.590227D4C2600E9BBB7B5082E4792767
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.445C035DB924A9B0FA42C72674EE4F89
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.AA975962B34D69CE1C78662B13A65313
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.BDA9A7110ADB2C122D0CA705B6B1D6FA
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.94C075BD3FE76604F8ED084C9B9E4AE5
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.C861C307A1307B7D19E67CEF0C9FF674
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.9AC8B3AFD901820523B5E22441984736
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.E7BF64005D511F7DF092A1FD63CAFDB2
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6DA60D3A441DEB83245CF9390DB652C2
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.FCB7A1CCECDBFE60B9F9268A4DA13E64
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.5EDB52181C6563D67BB04B9F6F9FFCB3
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.602C9239FB1B18A48D8E6AB920F9865E
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.613F01620D33F44F7F08DAD27477860D
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.B3F196534F6B3239F608E60F46CC5054
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.9395090644FD6A9EEDE620F2EDB2659C
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.51360490B8BC0FEA841584D3A7941DA9
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.21D484F75EB67BB6E52299CFE9026E8C
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.B470C7165F3CC8ED799ED4F8B5BAEA45
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.C56316687F31CD493F7064FD951EC99C
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.79EEE017A84D0C323D68CA23A8CB1076
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A4AFD3D5DA908492647C739E941CC97C
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.EF17F568146C914F8023380045758F9C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3D539F4D333D3240C489C26EC0A011EF
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B0E4F8E2EF4C7507621D37BF97395F31
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A426A6A86571D4DB76768FBF9E3540DF
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.BB0DDF53B3466065E0CC36A0EDFF2834
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.25C2373230B0EA43C94F0DCAAAEEA6FB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.179F228C42340ABB9EEB830006BC5F2A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3DDC7451EA1620AE50203012113A61CC
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.28359B909678D42A4868FB82F28934BB
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.486CB0412BAD44C82290FBD64DEC1F6D
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.C2B1E38A255F67B820C6DB2C5A021FC5
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.AA7061BA6F294ACDB2FA2282E0742BCC
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A5E2220D36BE184AE56CCD3CFC42D0AE
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.F6BC5F562CC7CDDF11632321B21D97DF
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.97CAA19C72182CEF847821F9E6FB3AAA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.3B8F9F9CA8F1879985BF29BF5CBD21E6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.E05E227E544680F0B4BB26DE70617352
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.56E9BDA78930F90CD41C280B94F3EC92
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.A7B51CF0108CAE7FF2ED2ECFEEF990D9
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.02F4797EB106FFD0157EC4EAB8FBB3BC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6D17F999F7BD299E10604D67FB269746
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.FC523C8224CB7FBABCF213D5D951CB18
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.0647B93684A5AF9B4EF9AAFC7148E0C7
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.04BA526681D926E6F55834C3FF14C800
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.C7CE8CF71088F3DB585CD3B02AD6C01E
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.2861D535C9E907B2316C6DD326F9C9DB
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.B3C891ADBE07985D8EB07F47AD5B9DA9
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.574C8D1B7983E679131E37FD5C3DF1B3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.75E4BA966FFC501D192F53E91B7DA97C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.CB9A35E0D20D8F23F42BE689119E06FA
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D7B16FCF4CB54A4DDD0B7B96965B0C89
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6C78CB68979C1B30B65792A51C4909B4
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 503
+
+
+
+
+
+ 1.1425C7EF3EB1C555EEDB3A7B83959C18
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.6C71667DFCE4EFE9D2D594675F5D0548
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3FA058A0E73CD716458E4AD473D01D8E
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.7A7A1F423942BCD065A53F5E2C08CA10
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.686D026F4E37237A3FB0CFDDADBC9F8A
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.285B3B8B3249390AC0EA62095620648D
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.483EDC95D9050419855BB2C9B7D9395A
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.57134A2893313DE704198EED54D5B6E6
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.9193C0F29388C5B9B6583A6BF6C2B347
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.424FC52414BFE0A49B6746D5DB1256AB
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.13C8280BFD2D49B31E703A6C942A14BB
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.2ED8A733A34F7268A165FCB3C4DE0232
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.BCD510DF25513B8FAF0352336F094053
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.D24D24F09DCA78579C08ADE1D5528A18
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.388A14B11DC4161D76E7BA3524CED336
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.E8ECE9BA39F0B03F8394B4AB5065B60D
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.67C819CC3E37319CB3D533A2D31F00D7
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.7A9D46F2B10E01B201BD25BF3DA3E3D6
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.466E11BA31409FC6549BB27A0C1400CC
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.5458586BDBC05CE6DC7B96FB305E279E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.221F7DCAF04AE6EB1BADF4997871733E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.2C5C28BB2FF03BAE5647F7DA4B0FBC7C
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.EF0CC59153D7673ED206E0F310880A6E
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.D946E977B16DE185BC7065F3C36BBA94
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.6758EF1C334FA94EC51F836A229DFFCA
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D96F1DC7CD390C447BBA6A55F52476AC
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A7D83C4D167D0650C16DF8831A5503C4
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D9690323F9BD00A1D7AC14D449C5C5F5
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.2BDEFEC679C5FBAF0D8D2934FE55F708
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.2ADB64C9DC3241D0FFE93910210E1FF9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.4ABF850B6F44B9FF493B4AD55E1CDA35
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.F0DCE0BD19F895084F3C461358ABB31B
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.362B98FD68A372E063F679FC32F89B31
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.CB7932D0E8A306C5A2E35C8916C0E4B4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E62DED290400027E754EB45DBAC5062D
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.DBBD22390D6F477450A6966FDA2CA298
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.FED65C1D6BB97C21B4F9DA0B7A997D35
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.44F69227AF5D5C013E4E8870692550C7
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.6B2469AA8D0FC2655F6EB394348EB437
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A0A9BFEABE8E3C638E51660CF67D0B3C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 500
+
+
+
+
+
+ 1.642E5DBD51439CCB994541FC44A20E26
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.FF1951EAE0ACBAB8DB513DF209D32122
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.B73F07D16A191E0EFD397E3DCB5CE051
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.31CBB28C0277768C8BF04A6CF1BA98A5
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.E6B45FD1B7595DCC123636DD01E50D8A
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.AD707ECC69A1E835FADE9B7B896C7C53
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.0C6CA5CFC56E62E1386738F250C749D4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.DCDFD61806AD8ACFAFF5EC59D7F63C8B
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.94A9B934CC18AB22E125F70FBB9F82DE
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.038E34A9C374FC176986FC568A165527
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.CA5A1C1C65E431A37F3207B81767774B
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.7D48EAAB19465D9008EFE5C6E3C020EA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3669C6C2F1550E1554DB9CF129DCD965
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 207
+
+
+
+
+
+ 1.A6D31BBFAFCCC9A55B9FEBF72E1C2953
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.32E4082ED243CB134EA743FF78000BD5
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.38E575DC2AF4B7D7CF3203E6B7BDA74D
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.220648A0923367BC4FA2794FA4BE4591
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.38448C20E04942C66F6D9AB3169CEF09
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.B7BB4C29193AC92DB35E9E206A01E30D
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.4D5F15EE9801D7E3BE0892FD38AFDE0D
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.E062F9FB6D3FA8A9EEE31C6A81CC6604
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.78F8ED04EC79A126AEADE8C08B0E4F97
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.958F111DBDA1BCE46EFBC10511A145E9
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.1E72B20786B3BFB6DE896C380864C4ED
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A62A0E7E1808EED079989D04772B6CB6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.65E7DE349575885F8EC2E78FFBBD3484
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.17A61EEDF79D76747BE37B3DA3F698DF
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.F0EE6E4715A3D2CFB1F5795EA52EF0A1
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.59DE4FDFB535F952488C8C76082D1957
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.AC6CF1A6EDCCAC74410543D331DCEBFC
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.83B487198471CDEAF5C95D371BE1227E
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.B13DC16C4369B842DD1580DFC9A23E90
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.D9B3DB52DF8218B45D48BECB5131915E
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.CF52BFFDF3E12D43EFD5F614833B7DCE
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.FF43777C8C33E41102BCF3F2A2A90C64
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.7B3676D45CECCC1D12D71EBA722FFF30
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.71B0E6E68AA99863BE55E1D6D037301B
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.9F2F0F9EE78721BF80AD83701F9736A0
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.680A6E46ADDF391752A3A89F95D73448
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.496A9334045EC97BFFE3A5116694FF85
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.BC1C6F682219387D81896AD542BFDA1B
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.21E756DE8577C5778B49EB14777DE712
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.9066576F0656AE6BA8E13A019F6A59AB
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.444CF76C0D4A6C4E637033A4D4E9126A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.3BFB533872841D46A011D369D3FF2977
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.3426C46B6878DDEC0DA8DA6A0D5554AA
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.068DA432A58C3D7331CA5C906158F229
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.B316331E65CCB79F118C8A178C4D1112
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.27B9DEC971AF1E0443505F6381B2C647
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.F528AE4144225E113F7B00825EE52AA2
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.8D68C314C554FFCC800097F48EA2B2BF
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.B29CE6CAE05044347C6F6D2CD82D2B76
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.0EDA4B68A5E0A7A119DF093167A9643B
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.25F94118327D5D07CF4BD4214EE33EC0
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.AD3D66C9BD4CFDABA55559C35CECD9E1
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.E336292FC529AF487A9AD66216D49654
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.673FA4C32058D8D329E1630ADA8E73C1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.B74A7AA44043A326AC2D7D7934967B14
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.75F9BD52CF2A252C3696A912624AF4E7
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.1568E0AA2E38BC533DF1D9A3C26D9A80
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.DA7E3AB4DC966A21CCA466E87760769B
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.AF491ABBC242A023D510DB3FEFC8D333
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.D0BF3B5963590A886B4DECEFF9D5DA2C
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.658474BB59B4C339A45CF52CB7F697C3
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.4F8C9F278402E6FB2E4EA057B834CC73
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.251760D30B95DDFD686CF5F8DD244B34
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 409
+
+
+
+
+
+ 1.0FC6240C9AA47CA11A06C45AF5EED527
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.AA72044B9C3357E0774AADA4EF555CC6
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 409
+
+
+
+
+
+ 500
+
+
+
+
+
+ 1.FDB6B21613281BC2D3D643F130FF943C
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 500
+
+
+
+
+
+ 1.E7E6381C3DCFF65F04EFF2E13C486B02
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.BCF75A4FA6D197563529575007325A9D
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.4D283CDE0658BDE321C6C7B4CFB00DB5
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 400
+
+
+
+
+
+ 1.10D8DE9FF8DAD881A8553CC2EA0B33D8
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.E49AE7C4E4606611A2264F17092383DE
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.AF255C11E7836E705C16FB2E0C5C5893
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.EDD41D719CF5C94BEBC543ED4E1FA92B
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.87C46F7702591A04073B685E3DCA18E8
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.DF34657F1F638BF55CCB59D8766A7A40
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.227468E94768C87DC18B9D82AE1DD73A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.A11EBAEA1FB195A00CA8C77DAA86896E
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.ED42C99A3F7707AE33EA46D9155ACF67
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.CB843F4F8FA5F1FD7A435EF77E9AB382
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.55C741CC9A0D6215D57FB954E57DBF9E
+
+
+
+
+
+
+
+
+ 200
+
+
+
+
+
+ 1.A37E5119D3567CC0420518DD48F43AC6
+
+
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 1.14B1920F8A49D1721022BDA3054DF8EB
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 1.BB98871AF82585B0C646B6954309CBC3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 201
+
+
+
+
+
+ 400
+
+
+
+
+
+ 403
+
+
+
+
+
+ 1.577E0E6FD00116FDB9FCC4BA96BC82E6
+
+
+
+
+
+
+
+
+ 204
+
+
+
+
+
+ 404
+
+
+
+
+
+ 1.EA981FC342B0BC7143D8A6B5C650CBA3
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/RandomDataChannelBuilder.java b/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/RandomDataChannelBuilder.java
new file mode 100644
index 000000000..fa4222cb9
--- /dev/null
+++ b/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/RandomDataChannelBuilder.java
@@ -0,0 +1,67 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+package com.spectralogic.ds3client.integration;
+
+import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
+import com.spectralogic.ds3client.models.bulk.Ds3Object;
+import com.spectralogic.ds3client.utils.ByteArraySeekableByteChannel;
+import org.apache.commons.io.IOUtils;
+
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.channels.SeekableByteChannel;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Creates a channel builder that generates random data. All object keys and sizes need to be specified.
+ */
+public class RandomDataChannelBuilder implements Ds3ClientHelpers.ObjectChannelBuilder {
+
+ private static final int seed = 12345;
+ private final Map objectMap = new HashMap();
+
+ public RandomDataChannelBuilder() {
+ }
+
+ public RandomDataChannelBuilder(final List objects) {
+ for (final Ds3Object obj : objects) {
+ this.objectMap.put(obj.getName(), obj.getSize());
+ }
+ }
+
+ RandomDataChannelBuilder withObject(final String key, final Long size) {
+ this.objectMap.put(key, size);
+ return this;
+ }
+
+ @Override
+ public SeekableByteChannel buildChannel(final String key) throws IOException {
+ if (!this.objectMap.containsKey(key)) {
+ throw new IllegalArgumentException(String.format("Object with name '%s' was not defined for this channel builder.", key));
+ }
+
+ final Long size = this.objectMap.get(key);
+ final byte[] randomData = IOUtils.toByteArray(new RandomDataInputStream(seed, size));
+ final ByteBuffer randomBuffer = ByteBuffer.wrap(randomData);
+
+ final ByteArraySeekableByteChannel channel = new ByteArraySeekableByteChannel(size.intValue());
+ channel.write(randomBuffer);
+
+ return channel;
+ }
+}
diff --git a/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/Util.java b/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/Util.java
index 245e5ad99..540a06c86 100644
--- a/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/Util.java
+++ b/ds3-sdk-integration/src/main/java/com/spectralogic/ds3client/integration/Util.java
@@ -15,15 +15,16 @@
package com.spectralogic.ds3client.integration;
+import com.google.common.collect.ImmutableList;
import com.spectralogic.ds3client.Ds3Client;
import com.spectralogic.ds3client.Ds3ClientBuilder;
-import com.spectralogic.ds3client.commands.DeleteBucketRequest;
-import com.spectralogic.ds3client.commands.DeleteObjectRequest;
-import com.spectralogic.ds3client.commands.spectrads3.GetSystemInformationSpectraS3Request;
+import com.spectralogic.ds3client.commands.spectrads3.*;
import com.spectralogic.ds3client.helpers.DeleteBucket;
import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
import com.spectralogic.ds3client.helpers.channelbuilders.PrefixAdderObjectChannelBuilder;
-import com.spectralogic.ds3client.models.Contents;
+import com.spectralogic.ds3client.models.Bucket;
+import com.spectralogic.ds3client.models.Job;
+import com.spectralogic.ds3client.models.JobStatus;
import com.spectralogic.ds3client.models.bulk.Ds3Object;
import com.spectralogic.ds3client.utils.ResourceUtils;
import org.slf4j.Logger;
@@ -31,8 +32,10 @@
import java.io.IOException;
import java.net.URISyntaxException;
+import java.nio.channels.FileChannel;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
@@ -60,6 +63,22 @@ public static Ds3Client insecureFromEnv() {
return builder.build();
}
+ /**
+ * Goes through all buckets on a BP and attempts to delete them and all their contents. It cancels all active jobs
+ * associated with this bucket. Created for cleaning up after cascade failures in functional tests.
+ *
+ * USE ONLY WHEN DELETING ALL BUCKETS AND ALL CONTENT IS YOUR GOAL.
+ */
+ public static void forceCleanupBucketsOnBP(final Ds3Client client) throws IOException {
+ final GetBucketsSpectraS3Request request = new GetBucketsSpectraS3Request();
+ final GetBucketsSpectraS3Response response = client.getBucketsSpectraS3(request);
+
+ for (final Bucket bucket : response.getBucketListResult().getBuckets()) {
+ cancelAllJobsForBucket(client, bucket.getName());
+ client.deleteBucketSpectraS3(new DeleteBucketSpectraS3Request(bucket.getName()).withForce(true));
+ }
+ }
+
public static void assumeVersion1_2(final Ds3Client client) throws IOException {
final int majorVersion = Integer.parseInt(client.getSystemInformationSpectraS3(
new GetSystemInformationSpectraS3Request()).getSystemInformationResult().getBuildInformation().getVersion().split("\\.")[0]);
@@ -79,6 +98,19 @@ public static void loadBookTestData(final Ds3Client client, final String bucketN
LOG.info("Finished loading test data...");
}
+ /**
+ * Loads a single test book to a BP with the specified object name.
+ */
+ public static void loadTestBook(final Ds3Client client, final String fileName, final String objectName, final String bucketName) throws IOException, URISyntaxException {
+ final Path filePath = ResourceUtils.loadFileResource(RESOURCE_BASE_NAME + fileName);
+ final Ds3Object obj = new Ds3Object(objectName, Files.size(filePath));
+
+ final Ds3ClientHelpers helpers = Ds3ClientHelpers.wrap(client);
+
+ final Ds3ClientHelpers.Job job = helpers.startWriteJob(bucketName, ImmutableList.of(obj));
+ job.transfer(key -> FileChannel.open(filePath, StandardOpenOption.READ));
+ }
+
public static Ds3ClientHelpers.Job getLoadJob(final Ds3Client client, final String bucketName, final String resourceBaseName) throws IOException, URISyntaxException {
final Ds3ClientHelpers helpers = Ds3ClientHelpers.wrap(client);
@@ -118,4 +150,19 @@ public static void deleteBucketContents(final Ds3Client client, final String buc
final Ds3ClientHelpers helpers = Ds3ClientHelpers.wrap(client);
DeleteBucket.INSTANCE.deleteBucketContents(helpers, bucketName);
}
+
+ // Cancels all in-progress jobs associated with a bucket
+ public static void cancelAllJobsForBucket(final Ds3Client client, final String bucketName) {
+ try {
+ final GetJobsSpectraS3Response getJobs = client.getJobsSpectraS3(new GetJobsSpectraS3Request().withBucketId(bucketName));
+
+ for (final Job job : getJobs.getJobListResult().getJobs()) {
+ if (job.getStatus() == JobStatus.IN_PROGRESS) {
+ client.cancelJobSpectraS3(new CancelJobSpectraS3Request(job.getJobId()));
+ }
+ }
+ } catch (final IOException e) {
+ LOG.debug("Could not cancel jobs for bucket '%s': %s", bucketName, e.getMessage());
+ }
+ }
}
diff --git a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java
index cfdad62ab..e2d283cc7 100644
--- a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java
+++ b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/PutJobManagement_Test.java
@@ -75,6 +75,7 @@
import static com.spectralogic.ds3client.commands.spectrads3.PutBulkJobSpectraS3Request.MIN_UPLOAD_SIZE_IN_BYTES;
import static com.spectralogic.ds3client.integration.Util.RESOURCE_BASE_NAME;
+import static com.spectralogic.ds3client.integration.Util.cancelAllJobsForBucket;
import static com.spectralogic.ds3client.integration.Util.deleteAllContents;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
@@ -192,6 +193,7 @@ public void getActiveJobs() throws IOException, URISyntaxException {
}
assertThat(activeJobsUUIDs, contains(jobID));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -210,6 +212,7 @@ public void getJobs() throws IOException {
assertThat(jobUUIDs, contains(jobID));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -230,6 +233,7 @@ public void modifyJobPriority() throws IOException {
assertThat(response.getMasterObjectListResult().getPriority(), is(Priority.HIGH));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -250,6 +254,7 @@ public void modifyJobName() throws IOException {
assertThat(response.getMasterObjectListResult().getName(), is("newName"));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -275,6 +280,7 @@ public void modifyJobCreationDate() throws IOException {
assertThat(responseAfterModify.getMasterObjectListResult().getStartDate(), is(newDate));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -543,6 +549,7 @@ public void getJobChunksReady() throws IOException {
assertThat(chunkNames, contains(ds3Object.getName()));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -568,6 +575,7 @@ public void getJobChunk() throws IOException {
assertThat(getJobChunkSpectraS3Response.getObjectsResult(), is(notNullValue()));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -589,6 +597,7 @@ public void aggregateTwoJobs() throws IOException {
assertThat(jobOneId, is(jobTwoId));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -612,6 +621,7 @@ public void testPutJobOptionsWithStreamingBehavior() throws IOException {
assertThat(jobOneId, is(jobTwoId));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -635,6 +645,7 @@ public void testPutJobOptionsWithRandomAccessBehavior() throws IOException {
assertThat(jobOneId, is(jobTwoId));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -652,6 +663,7 @@ public void allocateJobChunk() throws IOException {
assertThat(allocateResponse.getStatus(), is(AllocateJobChunkSpectraS3Response.Status.ALLOCATED));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -811,6 +823,7 @@ public void initiateMultipartUpload() throws IOException {
assertThat(e.getStatusCode(), is(400));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1217,6 +1230,7 @@ public void onFailure(final FailureEvent failureEvent) {
}
} finally {
FileUtils.deleteDirectory(tempDirectory.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1290,6 +1304,7 @@ public void waiting(final int secondsToWait) {
assertEquals(maxNumObjectTransferAttempts, numWaitingForChunksEventsFired.get());
} finally {
FileUtils.deleteDirectory(tempDirectory.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1324,6 +1339,7 @@ public void onFailure(final FailureEvent failureEvent) {
}
} finally {
FileUtils.deleteDirectory(tempDirectory.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1366,6 +1382,7 @@ public void testPutJobUsingTransferStrategy() throws IOException, InterruptedExc
assertEquals(FILE_NAMES[0], bucketContents.getKey());
}
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1411,6 +1428,7 @@ public void testWriteJobUsingTransferStrategy() throws IOException, InterruptedE
assertEquals(FILE_NAMES[0], bucketContents.getKey());
}
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1473,6 +1491,7 @@ public void monitor() {
assertEquals(1, numChunkAllocationAttempts.get());
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1575,6 +1594,7 @@ public void released() {
assertEquals(1, numTimesChannelOpened.get());
assertEquals(1, numTimesChannelClosed.get());
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1682,6 +1702,7 @@ public void monitor() {
assertEquals(1, numTimesTransferCalled.get());
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1764,6 +1785,7 @@ public void reset() {
assertEquals(0, numTimesInvokeCalled.get());
assertEquals(1, numTimesResetCalled.get());
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1824,6 +1846,7 @@ public void testPutJobUsingStreamedTransferStrategy() throws IOException, URISyn
assertEquals(FILE_NAMES[0], bucketContents.getKey());
}
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1857,6 +1880,7 @@ public void testPutJobUsingRandomAccessTransferStrategy() throws IOException, UR
assertEquals(FILE_NAMES[0], bucketContents.getKey());
}
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -1973,6 +1997,7 @@ public void testPutting15000Files() throws IOException, URISyntaxException {
fail("This test makes sure that we don't run out of connections when transferring lots of small files. Oops");
} finally {
FileUtils.deleteDirectory(tempDirectory.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
}
@@ -2006,6 +2031,7 @@ public void testThatFifoIsNotProcessed() throws IOException, InterruptedExceptio
caughtException.set(true);
} finally {
FileUtils.deleteDirectory(tempDirectory.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
@@ -2058,6 +2084,7 @@ public void testThatNonExistentFileDoesNotStopPutJob() throws IOException {
} finally {
FileUtils.deleteDirectory(tempDirectoryForFilesToGet.toFile());
FileUtils.deleteDirectory(tempDirectoryForFilesToPut.toFile());
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
}
@@ -2124,6 +2151,7 @@ public void testStreamedPutJobWithBlobbedFile() throws Exception {
assertTrue(FileUtils.contentEquals(new File(movedFileName), new File(originalFileName)));
} finally {
+ cancelAllJobsForBucket(client, BUCKET_NAME);
deleteAllContents(client, BUCKET_NAME);
Files.deleteIfExists(Paths.get(originalFileName));
diff --git a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/Regression_Test.java b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/Regression_Test.java
index 43b8e1442..d0823a147 100644
--- a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/Regression_Test.java
+++ b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/Regression_Test.java
@@ -89,6 +89,7 @@ public void testMarkerWithSpaces() throws IOException {
new Ds3Object("obj4 also has spaces.txt", 1024));
final Ds3ClientHelpers.Job putJob = HELPERS.startWriteJob(bucketName, objects);
+ putJob.transfer(new RandomDataChannelBuilder(objects));
final Iterable objs = HELPERS.listObjects(bucketName, null, "obj3 has spaces.txt");
boolean foundObj4 = false;
@@ -97,7 +98,7 @@ public void testMarkerWithSpaces() throws IOException {
if (obj.getKey().equals("obj4 also has spaces.txt")) foundObj4 = true;
LOG.info("marker with spaces size: " + obj.getSize());
}
- assertTrue(Iterables.size(objs) == 1);
+ assertThat(Iterables.size(objs), is(1));
assertTrue(foundObj4);
final CancelJobSpectraS3Response cancelJobResponse = client
@@ -122,6 +123,7 @@ public void testPrefixWithSpaces() throws IOException {
new Ds3Object("has spaces obj4.txt", 1024));
final Ds3ClientHelpers.Job putJob = HELPERS.startWriteJob(bucketName, objects);
+ putJob.transfer(new RandomDataChannelBuilder(objects));
final Iterable objs = HELPERS.listObjects(bucketName, "has spaces");
boolean foundObj2 = false;
@@ -132,7 +134,7 @@ public void testPrefixWithSpaces() throws IOException {
if (obj.getKey().equals("has spaces obj2.txt")) foundObj2 = true;
if (obj.getKey().equals("has spaces obj4.txt")) foundObj4 = true;
}
- assertTrue(Iterables.size(objs) == 2);
+ assertThat(Iterables.size(objs), is(2));
assertTrue(foundObj2);
assertTrue(foundObj4);
@@ -158,6 +160,7 @@ public void testPrefixForDirectoriesWithSpaces() throws IOException {
new Ds3Object("dir 2/has spaces obj4.txt", 1024));
final Ds3ClientHelpers.Job putJob = HELPERS.startWriteJob(bucketName, objects);
+ putJob.transfer(new RandomDataChannelBuilder(objects));
final Iterable dir1Objs = HELPERS.listObjects(bucketName, "dir1/");
boolean foundObj1 = false;
@@ -168,7 +171,7 @@ public void testPrefixForDirectoriesWithSpaces() throws IOException {
if (obj.getKey().equals("dir1/obj1_no_spaces.txt")) foundObj1 = true;
if (obj.getKey().equals("dir1/has spaces obj2.txt")) foundObj2 = true;
}
- assertTrue(Iterables.size(dir1Objs) == 2);
+ assertThat(Iterables.size(dir1Objs), is(2));
assertTrue(foundObj1);
assertTrue(foundObj2);
@@ -181,7 +184,7 @@ public void testPrefixForDirectoriesWithSpaces() throws IOException {
if (obj.getKey().equals("dir 2/obj3_no_spaces.txt")) foundObj3 = true;
if (obj.getKey().equals("dir 2/has spaces obj4.txt")) foundObj4 = true;
}
- assertTrue(Iterables.size(objsDir2) == 2);
+ assertThat(Iterables.size(objsDir2), is(2));
assertTrue(foundObj3);
assertTrue(foundObj4);
@@ -206,6 +209,7 @@ public void testPrefixForNestedDirectories() throws IOException {
new Ds3Object("dir1/dir 2/has spaces obj4.txt", 1024));
final Ds3ClientHelpers.Job putJob = HELPERS.startWriteJob(bucketName, objects);
+ putJob.transfer(new RandomDataChannelBuilder(objects));
final Iterable dir1Objs = HELPERS.listObjects(bucketName, "dir1/");
boolean foundObj1 = false;
@@ -216,7 +220,7 @@ public void testPrefixForNestedDirectories() throws IOException {
if (obj.getKey().equals("dir1/obj1_no_spaces.txt")) foundObj1 = true;
if (obj.getKey().equals("dir1/has spaces obj2.txt")) foundObj2 = true;
}
- assertTrue(Iterables.size(dir1Objs) == 4);
+ assertThat(Iterables.size(dir1Objs), is(4));
assertTrue(foundObj1);
assertTrue(foundObj2);
@@ -229,7 +233,7 @@ public void testPrefixForNestedDirectories() throws IOException {
if (obj.getKey().equals("dir1/dir 2/obj3_no_spaces.txt")) foundObj3 = true;
if (obj.getKey().equals("dir1/dir 2/has spaces obj4.txt")) foundObj4 = true;
}
- assertTrue(Iterables.size(objsDir2) == 2);
+ assertThat(Iterables.size(objsDir2), is(2));
assertTrue(foundObj3);
assertTrue(foundObj4);
diff --git a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/SpectraS3PaginationLoader_Test.java b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/SpectraS3PaginationLoader_Test.java
index c3e595c51..6fd9a9cfa 100644
--- a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/SpectraS3PaginationLoader_Test.java
+++ b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/SpectraS3PaginationLoader_Test.java
@@ -17,7 +17,6 @@
import com.google.common.collect.ImmutableList;
import com.spectralogic.ds3client.Ds3Client;
-import com.spectralogic.ds3client.commands.spectrads3.PutBulkJobSpectraS3Request;
import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
import com.spectralogic.ds3client.helpers.pagination.GetObjectsFullDetailsLoaderFactory;
import com.spectralogic.ds3client.integration.test.helpers.TempStorageIds;
@@ -76,7 +75,10 @@ public void basicPagination() throws IOException {
// test setup
HELPERS.ensureBucketExists(TEST_ENV_NAME);
final int numObjects = 55;
- CLIENT.putBulkJobSpectraS3(new PutBulkJobSpectraS3Request(TEST_ENV_NAME, createTestList(numObjects)));
+
+ final List objects = createTestList(numObjects);
+ final Ds3ClientHelpers.Job putJob = HELPERS.startWriteJob(TEST_ENV_NAME, objects);
+ putJob.transfer(new RandomDataChannelBuilder(objects));
final GetObjectsFullDetailsLoaderFactory loaderFactory = new GetObjectsFullDetailsLoaderFactory(CLIENT, TEST_ENV_NAME, 10, RETRIES, false);
diff --git a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/VersionedObject_Test.java b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/VersionedObject_Test.java
new file mode 100644
index 000000000..b3abbdc33
--- /dev/null
+++ b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/VersionedObject_Test.java
@@ -0,0 +1,191 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2018 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+package com.spectralogic.ds3client.integration;
+
+import com.spectralogic.ds3client.Ds3Client;
+import com.spectralogic.ds3client.commands.GetBucketRequest;
+import com.spectralogic.ds3client.commands.GetBucketResponse;
+import com.spectralogic.ds3client.commands.spectrads3.DeleteBucketSpectraS3Request;
+import com.spectralogic.ds3client.commands.spectrads3.GetBulkJobSpectraS3Request;
+import com.spectralogic.ds3client.commands.spectrads3.StageObjectsJobSpectraS3Request;
+import com.spectralogic.ds3client.helpers.Ds3ClientHelpers;
+import com.spectralogic.ds3client.helpers.FileObjectGetter;
+import com.spectralogic.ds3client.integration.test.helpers.TempStorageIds;
+import com.spectralogic.ds3client.integration.test.helpers.TempStorageUtil;
+import com.spectralogic.ds3client.models.ChecksumType;
+import com.spectralogic.ds3client.models.VersioningLevel;
+import com.spectralogic.ds3client.models.bulk.Ds3Object;
+import com.spectralogic.ds3client.utils.ResourceUtils;
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
+import static com.spectralogic.ds3client.integration.Util.*;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+
+public class VersionedObject_Test {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SpectraS3PaginationLoader_Test.class);
+
+ private static final Ds3Client CLIENT = Util.fromEnv();
+ private static final Ds3ClientHelpers HELPERS = Ds3ClientHelpers.wrap(CLIENT);
+ private static final String TEST_ENV_NAME = "java_versioned_object_test";
+
+ private static TempStorageIds envStorageIds;
+ private static UUID envDataPolicyId;
+
+ @BeforeClass
+ public static void startup() throws IOException {
+ LOG.info("Starting test Setup...");
+
+ // Create data policy with versioning
+ envDataPolicyId = TempStorageUtil.setupDataPolicy(
+ TEST_ENV_NAME,
+ false,
+ ChecksumType.Type.MD5,
+ VersioningLevel.KEEP_MULTIPLE_VERSIONS,
+ CLIENT);
+
+ envStorageIds = TempStorageUtil.setup(TEST_ENV_NAME, envDataPolicyId, CLIENT);
+ LOG.info("Finished test Setup...");
+ }
+
+ @AfterClass
+ public static void teardown() throws IOException {
+ LOG.info("Starting test teardown...");
+ TempStorageUtil.teardown(TEST_ENV_NAME, envStorageIds, CLIENT);
+ CLIENT.close();
+ LOG.info("Finished test teardown...");
+ }
+
+ @Test
+ public void getObjectsWithVersioning() throws IOException, URISyntaxException {
+ try {
+ HELPERS.ensureBucketExists(TEST_ENV_NAME, envDataPolicyId);
+ final String objectName = "object_with_versions";
+
+ // Put different content for object twice
+ loadTestBook(CLIENT, BOOKS[0], objectName, TEST_ENV_NAME); // putting beowulf as content
+ loadTestBook(CLIENT, BOOKS[1], objectName, TEST_ENV_NAME); // putting sherlock holmes as content
+
+ // Get the version of the objects
+ final GetBucketRequest getBucketRequest = new GetBucketRequest(TEST_ENV_NAME).withVersions(true);
+ final GetBucketResponse getBucketResponse = CLIENT.getBucket(getBucketRequest);
+
+ assertThat(getBucketResponse.getListBucketResult().getObjects().size(), is(0));
+ assertThat(getBucketResponse.getListBucketResult().getVersionedObjects().size(), is(2));
+
+ // Create bulk get job with both versions of object specified
+ final List objects = getBucketResponse.getListBucketResult().getVersionedObjects().stream()
+ .map(obj -> new Ds3Object(obj.getKey(), obj.getVersionId()))
+ .collect(Collectors.toList());
+
+ final GetBulkJobSpectraS3Request getBulkRequest = new GetBulkJobSpectraS3Request(TEST_ENV_NAME, objects);
+ CLIENT.getBulkJobSpectraS3(getBulkRequest);
+
+ } finally {
+ cancelAllJobsForBucket(CLIENT, TEST_ENV_NAME);
+ deleteAllContents(CLIENT, TEST_ENV_NAME);
+ }
+ }
+
+ @Test
+ public void stageObjectsWithVersioning() throws IOException, URISyntaxException {
+ try {
+ HELPERS.ensureBucketExists(TEST_ENV_NAME, envDataPolicyId);
+ final String objectName = "object_with_versions";
+
+ // Put different content for object twice
+ loadTestBook(CLIENT, BOOKS[0], objectName, TEST_ENV_NAME); // putting beowulf as content
+ loadTestBook(CLIENT, BOOKS[1], objectName, TEST_ENV_NAME); // putting sherlock holmes as content
+
+ // Get the version of the objects
+ final GetBucketRequest getBucketRequest = new GetBucketRequest(TEST_ENV_NAME).withVersions(true);
+ final GetBucketResponse getBucketResponse = CLIENT.getBucket(getBucketRequest);
+
+ assertThat(getBucketResponse.getListBucketResult().getObjects().size(), is(0));
+ assertThat(getBucketResponse.getListBucketResult().getVersionedObjects().size(), is(2));
+
+ // Create bulk get job with both versions of object specified
+ final List objects = getBucketResponse.getListBucketResult().getVersionedObjects().stream()
+ .map(obj -> new Ds3Object(obj.getKey(), obj.getVersionId()))
+ .collect(Collectors.toList());
+
+ final StageObjectsJobSpectraS3Request stageRequest = new StageObjectsJobSpectraS3Request(TEST_ENV_NAME, objects);
+ CLIENT.stageObjectsJobSpectraS3(stageRequest);
+
+ } finally {
+ CLIENT.deleteBucketSpectraS3(new DeleteBucketSpectraS3Request(TEST_ENV_NAME).withForce(true));
+ }
+ }
+
+ @Test
+ public void getObjectsWithVersioningUsingHelpers() throws IOException, URISyntaxException, InterruptedException {
+ // Create temp directory for files we will retrieve from bp
+ final Path tempDirectory = Files.createTempDirectory(Paths.get("."), null);
+
+ try {
+ HELPERS.ensureBucketExists(TEST_ENV_NAME, envDataPolicyId);
+ final String objectName = "object_with_versions";
+
+ // Put different content for object twice
+ loadTestBook(CLIENT, BOOKS[0], objectName, TEST_ENV_NAME); // putting beowulf as content
+ loadTestBook(CLIENT, BOOKS[1], objectName, TEST_ENV_NAME); // putting sherlock holmes as content
+
+ // Get the version of the objects
+ final GetBucketRequest getBucketRequest = new GetBucketRequest(TEST_ENV_NAME).withVersions(true);
+ final GetBucketResponse getBucketResponse = CLIENT.getBucket(getBucketRequest);
+
+ assertThat(getBucketResponse.getListBucketResult().getObjects().size(), is(0));
+ assertThat(getBucketResponse.getListBucketResult().getVersionedObjects().size(), is(2));
+
+ // Create bulk get job with the oldest version of the object
+ final List objects = getBucketResponse.getListBucketResult().getVersionedObjects().stream()
+ .filter(obj -> !obj.getIsLatest()) // filters out the latest version of the object
+ .map(obj -> new Ds3Object(obj.getKey(), obj.getVersionId()))
+ .collect(Collectors.toList());
+
+ final Ds3ClientHelpers.Job readJob = HELPERS.startReadJob(TEST_ENV_NAME, objects);
+
+ readJob.transfer(new FileObjectGetter(tempDirectory));
+
+ // Check content is beowulf, which was the first version of content
+ final File originalFile = ResourceUtils.loadFileResource(RESOURCE_BASE_NAME + BOOKS[0]).toFile();
+ final File fileCopiedFromBP = Paths.get(tempDirectory.toString(), objectName).toFile();
+ assertTrue(FileUtils.contentEquals(originalFile, fileCopiedFromBP));
+
+ } finally {
+ cancelAllJobsForBucket(CLIENT, TEST_ENV_NAME);
+ deleteAllContents(CLIENT, TEST_ENV_NAME);
+ FileUtils.deleteDirectory(tempDirectory.toFile());
+ }
+ }
+}
diff --git a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/test/helpers/TempStorageUtil.java b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/test/helpers/TempStorageUtil.java
index 0f7efe21d..c36e17840 100644
--- a/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/test/helpers/TempStorageUtil.java
+++ b/ds3-sdk-integration/src/test/java/com/spectralogic/ds3client/integration/test/helpers/TempStorageUtil.java
@@ -19,6 +19,7 @@
import com.spectralogic.ds3client.commands.spectrads3.*;
import com.spectralogic.ds3client.models.ChecksumType;
import com.spectralogic.ds3client.models.PoolType;
+import com.spectralogic.ds3client.models.VersioningLevel;
import java.io.IOException;
import java.util.UUID;
@@ -108,4 +109,23 @@ public static UUID setupDataPolicy(
.withDefaultDataPolicyId(dataPolicyResponse.getDataPolicyResult().getId()));
return dataPolicyResponse.getDataPolicyResult().getId();
}
+
+ /**
+ * Creates a Data Policy with the specified checksum type, end-to-end crc, and versioning
+ */
+ public static UUID setupDataPolicy(
+ final String testSetName,
+ final boolean withEndToEndCrcRequired,
+ final ChecksumType.Type checksumType,
+ final VersioningLevel versioningLevel,
+ final Ds3Client client) throws IOException {
+ final PutDataPolicySpectraS3Response dataPolicyResponse = client.putDataPolicySpectraS3(
+ new PutDataPolicySpectraS3Request(testSetName + DATA_POLICY_NAME)
+ .withEndToEndCrcRequired(withEndToEndCrcRequired)
+ .withChecksumType(checksumType).withAlwaysForcePutJobCreation(true)
+ .withVersioning(versioningLevel));
+ client.modifyUserSpectraS3(new ModifyUserSpectraS3Request(DEFAULT_USER)
+ .withDefaultDataPolicyId(dataPolicyResponse.getDataPolicyResult().getId()));
+ return dataPolicyResponse.getDataPolicyResult().getId();
+ }
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3Client.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3Client.java
index 559dfc55e..3aeefa580 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3Client.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3Client.java
@@ -895,6 +895,13 @@ ModifyJobSpectraS3Response modifyJobSpectraS3(final ModifyJobSpectraS3Request re
ReplicatePutJobSpectraS3Response replicatePutJobSpectraS3(final ReplicatePutJobSpectraS3Request request)
throws IOException;
+ @ResponsePayloadModel("MasterObjectList")
+ @Action("MODIFY")
+ @Resource("BUCKET")
+
+ StageObjectsJobSpectraS3Response stageObjectsJobSpectraS3(final StageObjectsJobSpectraS3Request request)
+ throws IOException;
+
@Action("DELETE")
@Resource("ACTIVE_JOB")
@@ -1372,6 +1379,13 @@ GetPhysicalPlacementForObjectsSpectraS3Response getPhysicalPlacementForObjectsSp
GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Response getPhysicalPlacementForObjectsWithFullDetailsSpectraS3(final GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request request)
throws IOException;
+ @ResponsePayloadModel("S3Object")
+ @Action("BULK_MODIFY")
+ @Resource("OBJECT")
+
+ UndeleteObjectSpectraS3Response undeleteObjectSpectraS3(final UndeleteObjectSpectraS3Request request)
+ throws IOException;
+
@ResponsePayloadModel("PhysicalPlacement")
@Action("SHOW")
@Resource("BUCKET")
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientImpl.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientImpl.java
index a04ac9ca7..e8b752e61 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientImpl.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/Ds3ClientImpl.java
@@ -570,6 +570,10 @@ public ReplicatePutJobSpectraS3Response replicatePutJobSpectraS3(final Replicate
return new ReplicatePutJobSpectraS3ResponseParser().response(this.netClient.getResponse(request));
}
@Override
+ public StageObjectsJobSpectraS3Response stageObjectsJobSpectraS3(final StageObjectsJobSpectraS3Request request) throws IOException {
+ return new StageObjectsJobSpectraS3ResponseParser().response(this.netClient.getResponse(request));
+ }
+ @Override
public TruncateActiveJobSpectraS3Response truncateActiveJobSpectraS3(final TruncateActiveJobSpectraS3Request request) throws IOException {
return new TruncateActiveJobSpectraS3ResponseParser().response(this.netClient.getResponse(request));
}
@@ -854,6 +858,10 @@ public GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Response getPhysica
return new GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3ResponseParser().response(this.netClient.getResponse(request));
}
@Override
+ public UndeleteObjectSpectraS3Response undeleteObjectSpectraS3(final UndeleteObjectSpectraS3Request request) throws IOException {
+ return new UndeleteObjectSpectraS3ResponseParser().response(this.netClient.getResponse(request));
+ }
+ @Override
public VerifyPhysicalPlacementForObjectsSpectraS3Response verifyPhysicalPlacementForObjectsSpectraS3(final VerifyPhysicalPlacementForObjectsSpectraS3Request request) throws IOException {
return new VerifyPhysicalPlacementForObjectsSpectraS3ResponseParser().response(this.netClient.getResponse(request));
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectRequest.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectRequest.java
index bb2da1b05..ad11d6c7b 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectRequest.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectRequest.java
@@ -18,6 +18,8 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
+import java.util.UUID;
+import com.google.common.net.UrlEscapers;
public class DeleteObjectRequest extends AbstractRequest {
@@ -27,7 +29,7 @@ public class DeleteObjectRequest extends AbstractRequest {
private final String objectName;
- private boolean rollBack;
+ private String versionId;
// Constructor
@@ -38,13 +40,16 @@ public DeleteObjectRequest(final String bucketName, final String objectName) {
}
- public DeleteObjectRequest withRollBack(final boolean rollBack) {
- this.rollBack = rollBack;
- if (this.rollBack) {
- this.getQueryParams().put("roll_back", null);
- } else {
- this.getQueryParams().remove("roll_back");
- }
+ public DeleteObjectRequest withVersionId(final UUID versionId) {
+ this.versionId = versionId.toString();
+ this.updateQueryParam("version_id", versionId);
+ return this;
+ }
+
+
+ public DeleteObjectRequest withVersionId(final String versionId) {
+ this.versionId = versionId;
+ this.updateQueryParam("version_id", versionId);
return this;
}
@@ -70,8 +75,8 @@ public String getObjectName() {
}
- public boolean getRollBack() {
- return this.rollBack;
+ public String getVersionId() {
+ return this.versionId;
}
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectsRequest.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectsRequest.java
index 7b370467c..60729e397 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectsRequest.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/DeleteObjectsRequest.java
@@ -35,8 +35,6 @@ public class DeleteObjectsRequest extends AbstractRequest {
private final List objects;
private final String bucketName;
-
- private boolean rollBack;
private boolean quiet = false;
private long size;
@@ -66,17 +64,6 @@ private static List contentsToString(final Iterable objs) {
return objKeyList;
}
- public DeleteObjectsRequest withRollBack(final boolean rollBack) {
- this.rollBack = rollBack;
- if (this.rollBack) {
- this.getQueryParams().put("roll_back", null);
- } else {
- this.getQueryParams().remove("roll_back");
- }
- return this;
- }
-
-
public DeleteObjectsRequest withQuiet(final boolean quiet) {
this.quiet = quiet;
@@ -128,11 +115,6 @@ public String getBucketName() {
}
- public boolean getRollBack() {
- return this.rollBack;
- }
-
-
@Override
public long getSize() {
return this.size;
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetBucketRequest.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetBucketRequest.java
index d2c38fa11..a1d2959f9 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetBucketRequest.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetBucketRequest.java
@@ -34,6 +34,8 @@ public class GetBucketRequest extends AbstractRequest {
private String prefix;
+ private boolean versions;
+
// Constructor
@@ -70,6 +72,17 @@ public GetBucketRequest withPrefix(final String prefix) {
}
+ public GetBucketRequest withVersions(final boolean versions) {
+ this.versions = versions;
+ if (this.versions) {
+ this.getQueryParams().put("versions", null);
+ } else {
+ this.getQueryParams().remove("versions");
+ }
+ return this;
+ }
+
+
@Override
public HttpVerb getVerb() {
@@ -105,4 +118,9 @@ public String getPrefix() {
return this.prefix;
}
+
+ public boolean getVersions() {
+ return this.versions;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetObjectRequest.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetObjectRequest.java
index 68c269fcc..7e6facf55 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetObjectRequest.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/GetObjectRequest.java
@@ -46,6 +46,8 @@ public class GetObjectRequest extends AbstractRequest {
private String job;
private long offset;
+
+ private String versionId;
private ImmutableCollection byteRanges = null;
private ChecksumType checksum = ChecksumType.none();
private ChecksumType.Type checksumType = ChecksumType.Type.NONE;
@@ -149,6 +151,20 @@ public GetObjectRequest withOffset(final long offset) {
}
+ public GetObjectRequest withVersionId(final UUID versionId) {
+ this.versionId = versionId.toString();
+ this.updateQueryParam("version_id", versionId);
+ return this;
+ }
+
+
+ public GetObjectRequest withVersionId(final String versionId) {
+ this.versionId = versionId;
+ this.updateQueryParam("version_id", versionId);
+ return this;
+ }
+
+
/**
* Set a MD5 checksum for the request.
@@ -250,6 +266,11 @@ public long getOffset() {
}
+ public String getVersionId() {
+ return this.versionId;
+ }
+
+
public Collection getByteRanges() {
return this.byteRanges;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/interfaces/BulkRequest.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/interfaces/BulkRequest.java
index 22984cdb4..4a2eb6465 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/interfaces/BulkRequest.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/interfaces/BulkRequest.java
@@ -34,8 +34,6 @@ public abstract class BulkRequest extends AbstractRequest {
private InputStream stream;
private long size;
private Priority priority;
- private WriteOptimization writeOptimization;
- protected JobChunkClientProcessingOrderGuarantee chunkOrdering;
public BulkRequest(final String bucket, final Iterable objects) {
this.bucket = bucket;
@@ -44,11 +42,7 @@ public BulkRequest(final String bucket, final Iterable objects) {
public BulkRequest withPriority(final Priority priority) {
this.priority = priority;
- return this;
- }
-
- public BulkRequest withWriteOptimization(final WriteOptimization writeOptimization) {
- this.writeOptimization = writeOptimization;
+ this.updateQueryParam("priority", priority);
return this;
}
@@ -56,9 +50,6 @@ private InputStream generateStream() {
final Ds3ObjectList objects =
new Ds3ObjectList();
objects.setObjects(this.ds3Objects);
- objects.setPriority(this.priority);
- objects.setWriteOptimization(this.writeOptimization);
- objects.setChunkClientProcessingOrderGuarantee(this.chunkOrdering);
final StringBuilder xmlOutputBuilder = new StringBuilder();
if (this.getCommand() == BulkCommand.PUT) {
@@ -108,8 +99,4 @@ public InputStream getStream() {
public Priority getPriority() {
return priority;
}
-
- public WriteOptimization getWriteOptimization() {
- return writeOptimization;
- }
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/GetBlobsOnTapeSpectraS3ResponseParser.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/GetBlobsOnTapeSpectraS3ResponseParser.java
index 150e6711b..c30308283 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/GetBlobsOnTapeSpectraS3ResponseParser.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/GetBlobsOnTapeSpectraS3ResponseParser.java
@@ -31,12 +31,14 @@ public class GetBlobsOnTapeSpectraS3ResponseParser extends AbstractResponseParse
@Override
public GetBlobsOnTapeSpectraS3Response parseXmlResponse(final WebResponse response) throws IOException {
final int statusCode = response.getStatusCode();
+ final Integer pagingTruncated = parseIntHeader("page-truncated");
+ final Integer pagingTotalResultCount = parseIntHeader("total-result-count");
if (ResponseParserUtils.validateStatusCode(statusCode, expectedStatusCodes)) {
switch (statusCode) {
case 200:
try (final InputStream inputStream = response.getResponseStream()) {
final BulkObjectList result = XmlOutput.fromXml(inputStream, BulkObjectList.class);
- return new GetBlobsOnTapeSpectraS3Response(result, this.getChecksum(), this.getChecksumType());
+ return new GetBlobsOnTapeSpectraS3Response(result, pagingTotalResultCount, pagingTruncated, this.getChecksum(), this.getChecksumType());
}
default:
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/StageObjectsJobSpectraS3ResponseParser.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/StageObjectsJobSpectraS3ResponseParser.java
new file mode 100644
index 000000000..e61ce46b6
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/StageObjectsJobSpectraS3ResponseParser.java
@@ -0,0 +1,49 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.parsers;
+
+import com.spectralogic.ds3client.commands.parsers.interfaces.AbstractResponseParser;
+import com.spectralogic.ds3client.commands.parsers.utils.ResponseParserUtils;
+import com.spectralogic.ds3client.commands.spectrads3.StageObjectsJobSpectraS3Response;
+import com.spectralogic.ds3client.models.MasterObjectList;
+import com.spectralogic.ds3client.networking.WebResponse;
+import com.spectralogic.ds3client.serializer.XmlOutput;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class StageObjectsJobSpectraS3ResponseParser extends AbstractResponseParser {
+ private final int[] expectedStatusCodes = new int[]{200};
+
+ @Override
+ public StageObjectsJobSpectraS3Response parseXmlResponse(final WebResponse response) throws IOException {
+ final int statusCode = response.getStatusCode();
+ if (ResponseParserUtils.validateStatusCode(statusCode, expectedStatusCodes)) {
+ switch (statusCode) {
+ case 200:
+ try (final InputStream inputStream = response.getResponseStream()) {
+ final MasterObjectList result = XmlOutput.fromXml(inputStream, MasterObjectList.class);
+ return new StageObjectsJobSpectraS3Response(result, this.getChecksum(), this.getChecksumType());
+ }
+
+ default:
+ assert false: "validateStatusCode should have made it impossible to reach this line";
+ }
+ }
+
+ throw ResponseParserUtils.createFailedRequest(response, expectedStatusCodes);
+ }
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/UndeleteObjectSpectraS3ResponseParser.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/UndeleteObjectSpectraS3ResponseParser.java
new file mode 100644
index 000000000..709f25eb7
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/parsers/UndeleteObjectSpectraS3ResponseParser.java
@@ -0,0 +1,49 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.parsers;
+
+import com.spectralogic.ds3client.commands.parsers.interfaces.AbstractResponseParser;
+import com.spectralogic.ds3client.commands.parsers.utils.ResponseParserUtils;
+import com.spectralogic.ds3client.commands.spectrads3.UndeleteObjectSpectraS3Response;
+import com.spectralogic.ds3client.models.S3Object;
+import com.spectralogic.ds3client.networking.WebResponse;
+import com.spectralogic.ds3client.serializer.XmlOutput;
+import java.io.IOException;
+import java.io.InputStream;
+
+public class UndeleteObjectSpectraS3ResponseParser extends AbstractResponseParser {
+ private final int[] expectedStatusCodes = new int[]{200};
+
+ @Override
+ public UndeleteObjectSpectraS3Response parseXmlResponse(final WebResponse response) throws IOException {
+ final int statusCode = response.getStatusCode();
+ if (ResponseParserUtils.validateStatusCode(statusCode, expectedStatusCodes)) {
+ switch (statusCode) {
+ case 200:
+ try (final InputStream inputStream = response.getResponseStream()) {
+ final S3Object result = XmlOutput.fromXml(inputStream, S3Object.class);
+ return new UndeleteObjectSpectraS3Response(result, this.getChecksum(), this.getChecksumType());
+ }
+
+ default:
+ assert false: "validateStatusCode should have made it impossible to reach this line";
+ }
+ }
+
+ throw ResponseParserUtils.createFailedRequest(response, expectedStatusCodes);
+ }
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ClearSuspectBlobDs3TargetsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ClearSuspectBlobDs3TargetsSpectraS3Request.java
index d310a8436..52d39f14d 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ClearSuspectBlobDs3TargetsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ClearSuspectBlobDs3TargetsSpectraS3Request.java
@@ -17,9 +17,11 @@
package com.spectralogic.ds3client.commands.spectrads3;
import com.spectralogic.ds3client.networking.HttpVerb;
-import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
+import com.spectralogic.ds3client.commands.interfaces.AbstractIdsPayloadRequest;
-public class ClearSuspectBlobDs3TargetsSpectraS3Request extends AbstractRequest {
+import java.util.List;
+
+public class ClearSuspectBlobDs3TargetsSpectraS3Request extends AbstractIdsPayloadRequest {
// Variables
@@ -27,8 +29,8 @@ public class ClearSuspectBlobDs3TargetsSpectraS3Request extends AbstractRequest
// Constructor
-
- public ClearSuspectBlobDs3TargetsSpectraS3Request() {
+ public ClearSuspectBlobDs3TargetsSpectraS3Request(final List ids) {
+ super(ids);
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DelegateCreateUserSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DelegateCreateUserSpectraS3Request.java
index ce582887e..8785a7163 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DelegateCreateUserSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DelegateCreateUserSpectraS3Request.java
@@ -29,6 +29,8 @@ public class DelegateCreateUserSpectraS3Request extends AbstractRequest {
private String id;
+ private int maxBuckets;
+
private String secretKey;
// Constructor
@@ -55,6 +57,13 @@ public DelegateCreateUserSpectraS3Request withId(final String id) {
}
+ public DelegateCreateUserSpectraS3Request withMaxBuckets(final int maxBuckets) {
+ this.maxBuckets = maxBuckets;
+ this.updateQueryParam("max_buckets", maxBuckets);
+ return this;
+ }
+
+
public DelegateCreateUserSpectraS3Request withSecretKey(final String secretKey) {
this.secretKey = secretKey;
this.updateQueryParam("secret_key", secretKey);
@@ -83,6 +92,11 @@ public String getId() {
}
+ public int getMaxBuckets() {
+ return this.maxBuckets;
+ }
+
+
public String getSecretKey() {
return this.secretKey;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DeleteFolderRecursivelySpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DeleteFolderRecursivelySpectraS3Request.java
index d511ad6ca..46e0a48b0 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DeleteFolderRecursivelySpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/DeleteFolderRecursivelySpectraS3Request.java
@@ -28,8 +28,6 @@ public class DeleteFolderRecursivelySpectraS3Request extends AbstractRequest {
private final String bucketId;
- private boolean rollBack;
-
// Constructor
@@ -42,17 +40,6 @@ public DeleteFolderRecursivelySpectraS3Request(final String bucketId, final Stri
this.getQueryParams().put("recursive", null);
}
- public DeleteFolderRecursivelySpectraS3Request withRollBack(final boolean rollBack) {
- this.rollBack = rollBack;
- if (this.rollBack) {
- this.getQueryParams().put("roll_back", null);
- } else {
- this.getQueryParams().remove("roll_back");
- }
- return this;
- }
-
-
@Override
public HttpVerb getVerb() {
@@ -73,9 +60,4 @@ public String getBucketId() {
return this.bucketId;
}
-
- public boolean getRollBack() {
- return this.rollBack;
- }
-
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainBlobsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainBlobsSpectraS3Request.java
index 5e3909fcc..7c1b5a268 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainBlobsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainBlobsSpectraS3Request.java
@@ -28,7 +28,6 @@
import java.nio.charset.Charset;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import com.google.common.net.UrlEscapers;
-import java.util.UUID;
public class EjectStorageDomainBlobsSpectraS3Request extends AbstractRequest {
@@ -36,7 +35,7 @@ public class EjectStorageDomainBlobsSpectraS3Request extends AbstractRequest {
private final String bucketId;
- private final String storageDomainId;
+ private final String storageDomain;
private final List objects;
@@ -48,9 +47,9 @@ public class EjectStorageDomainBlobsSpectraS3Request extends AbstractRequest {
// Constructor
- public EjectStorageDomainBlobsSpectraS3Request(final String bucketId, final List objects, final UUID storageDomainId) {
+ public EjectStorageDomainBlobsSpectraS3Request(final String bucketId, final List objects, final String storageDomain) {
this.bucketId = bucketId;
- this.storageDomainId = storageDomainId.toString();
+ this.storageDomain = storageDomain;
this.objects = objects;
this.getQueryParams().put("operation", "eject");
@@ -58,22 +57,7 @@ public EjectStorageDomainBlobsSpectraS3Request(final String bucketId, final List
this.getQueryParams().put("blobs", null);
this.updateQueryParam("bucket_id", bucketId);
- this.updateQueryParam("storage_domain_id", storageDomainId);
-
- }
-
-
- public EjectStorageDomainBlobsSpectraS3Request(final String bucketId, final List objects, final String storageDomainId) {
- this.bucketId = bucketId;
- this.storageDomainId = storageDomainId;
- this.objects = objects;
-
- this.getQueryParams().put("operation", "eject");
-
- this.getQueryParams().put("blobs", null);
- this.updateQueryParam("bucket_id", bucketId);
-
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ this.updateQueryParam("storage_domain", storageDomain);
}
@@ -127,8 +111,8 @@ public String getBucketId() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainSpectraS3Request.java
index 5acdc03ab..da025cc71 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/EjectStorageDomainSpectraS3Request.java
@@ -18,14 +18,13 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import java.util.UUID;
import com.google.common.net.UrlEscapers;
public class EjectStorageDomainSpectraS3Request extends AbstractRequest {
// Variables
- private final String storageDomainId;
+ private final String storageDomain;
private String bucketId;
@@ -36,22 +35,12 @@ public class EjectStorageDomainSpectraS3Request extends AbstractRequest {
// Constructor
- public EjectStorageDomainSpectraS3Request(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
+ public EjectStorageDomainSpectraS3Request(final String storageDomain) {
+ this.storageDomain = storageDomain;
this.getQueryParams().put("operation", "eject");
- this.updateQueryParam("storage_domain_id", storageDomainId);
-
- }
-
-
- public EjectStorageDomainSpectraS3Request(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
-
- this.getQueryParams().put("operation", "eject");
-
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ this.updateQueryParam("storage_domain", storageDomain);
}
@@ -87,8 +76,8 @@ public String getPath() {
return "/_rest_/tape";
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Request.java
index 453689c31..a4574f1f7 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Request.java
@@ -17,16 +17,24 @@
package com.spectralogic.ds3client.commands.spectrads3;
import com.spectralogic.ds3client.networking.HttpVerb;
-import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
+import com.spectralogic.ds3client.commands.interfaces.AbstractPaginationRequest;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
-public class GetBlobsOnTapeSpectraS3Request extends AbstractRequest {
+public class GetBlobsOnTapeSpectraS3Request extends AbstractPaginationRequest {
// Variables
private final String tapeId;
+ private boolean lastPage;
+
+ private int pageLength;
+
+ private int pageOffset;
+
+ private String pageStartMarker;
+
// Constructor
@@ -45,6 +53,45 @@ public GetBlobsOnTapeSpectraS3Request(final String tapeId) {
}
+ public GetBlobsOnTapeSpectraS3Request withLastPage(final boolean lastPage) {
+ this.lastPage = lastPage;
+ if (this.lastPage) {
+ this.getQueryParams().put("last_page", null);
+ } else {
+ this.getQueryParams().remove("last_page");
+ }
+ return this;
+ }
+
+
+ public GetBlobsOnTapeSpectraS3Request withPageLength(final int pageLength) {
+ this.pageLength = pageLength;
+ this.updateQueryParam("page_length", pageLength);
+ return this;
+ }
+
+
+ public GetBlobsOnTapeSpectraS3Request withPageOffset(final int pageOffset) {
+ this.pageOffset = pageOffset;
+ this.updateQueryParam("page_offset", pageOffset);
+ return this;
+ }
+
+
+ public GetBlobsOnTapeSpectraS3Request withPageStartMarker(final UUID pageStartMarker) {
+ this.pageStartMarker = pageStartMarker.toString();
+ this.updateQueryParam("page_start_marker", pageStartMarker);
+ return this;
+ }
+
+
+ public GetBlobsOnTapeSpectraS3Request withPageStartMarker(final String pageStartMarker) {
+ this.pageStartMarker = pageStartMarker;
+ this.updateQueryParam("page_start_marker", pageStartMarker);
+ return this;
+ }
+
+
@Override
public HttpVerb getVerb() {
@@ -60,4 +107,24 @@ public String getTapeId() {
return this.tapeId;
}
+
+ public boolean getLastPage() {
+ return this.lastPage;
+ }
+
+
+ public int getPageLength() {
+ return this.pageLength;
+ }
+
+
+ public int getPageOffset() {
+ return this.pageOffset;
+ }
+
+
+ public String getPageStartMarker() {
+ return this.pageStartMarker;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Response.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Response.java
index e20f6dcf3..7eeb7a721 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Response.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetBlobsOnTapeSpectraS3Response.java
@@ -18,14 +18,14 @@
import com.spectralogic.ds3client.models.BulkObjectList;
import com.spectralogic.ds3client.models.ChecksumType;
-import com.spectralogic.ds3client.commands.interfaces.AbstractResponse;
+import com.spectralogic.ds3client.commands.interfaces.AbstractPaginationResponse;
+
+public class GetBlobsOnTapeSpectraS3Response extends AbstractPaginationResponse {
-public class GetBlobsOnTapeSpectraS3Response extends AbstractResponse {
-
private final BulkObjectList bulkObjectListResult;
- public GetBlobsOnTapeSpectraS3Response(final BulkObjectList bulkObjectListResult, final String checksum, final ChecksumType.Type checksumType) {
- super(checksum, checksumType);
+ public GetBlobsOnTapeSpectraS3Response(final BulkObjectList bulkObjectListResult, final Integer pagingTotalResultCount, final Integer pagingTruncated, final String checksum, final ChecksumType.Type checksumType) {
+ super(pagingTotalResultCount, pagingTruncated, checksum, checksumType);
this.bulkObjectListResult = bulkObjectListResult;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsDetailsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsDetailsSpectraS3Request.java
index d8fd50532..ba524565c 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsDetailsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsDetailsSpectraS3Request.java
@@ -28,6 +28,8 @@ public class GetObjectsDetailsSpectraS3Request extends AbstractPaginationRequest
private String bucketId;
+ private long endDate;
+
private boolean lastPage;
private boolean latest;
@@ -40,9 +42,9 @@ public class GetObjectsDetailsSpectraS3Request extends AbstractPaginationRequest
private String pageStartMarker;
- private S3ObjectType type;
+ private long startDate;
- private long version;
+ private S3ObjectType type;
// Constructor
@@ -58,6 +60,13 @@ public GetObjectsDetailsSpectraS3Request withBucketId(final String bucketId) {
}
+ public GetObjectsDetailsSpectraS3Request withEndDate(final long endDate) {
+ this.endDate = endDate;
+ this.updateQueryParam("end_date", endDate);
+ return this;
+ }
+
+
public GetObjectsDetailsSpectraS3Request withLastPage(final boolean lastPage) {
this.lastPage = lastPage;
if (this.lastPage) {
@@ -111,16 +120,16 @@ public GetObjectsDetailsSpectraS3Request withPageStartMarker(final String pageSt
}
- public GetObjectsDetailsSpectraS3Request withType(final S3ObjectType type) {
- this.type = type;
- this.updateQueryParam("type", type);
+ public GetObjectsDetailsSpectraS3Request withStartDate(final long startDate) {
+ this.startDate = startDate;
+ this.updateQueryParam("start_date", startDate);
return this;
}
- public GetObjectsDetailsSpectraS3Request withVersion(final long version) {
- this.version = version;
- this.updateQueryParam("version", version);
+ public GetObjectsDetailsSpectraS3Request withType(final S3ObjectType type) {
+ this.type = type;
+ this.updateQueryParam("type", type);
return this;
}
@@ -141,6 +150,11 @@ public String getBucketId() {
}
+ public long getEndDate() {
+ return this.endDate;
+ }
+
+
public boolean getLastPage() {
return this.lastPage;
}
@@ -171,13 +185,13 @@ public String getPageStartMarker() {
}
- public S3ObjectType getType() {
- return this.type;
+ public long getStartDate() {
+ return this.startDate;
}
- public long getVersion() {
- return this.version;
+ public S3ObjectType getType() {
+ return this.type;
}
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsWithFullDetailsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsWithFullDetailsSpectraS3Request.java
index 5f021cdad..6b6ba4fd1 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsWithFullDetailsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetObjectsWithFullDetailsSpectraS3Request.java
@@ -28,6 +28,8 @@ public class GetObjectsWithFullDetailsSpectraS3Request extends AbstractPaginatio
private String bucketId;
+ private long endDate;
+
private boolean includePhysicalPlacement;
private boolean lastPage;
@@ -42,9 +44,9 @@ public class GetObjectsWithFullDetailsSpectraS3Request extends AbstractPaginatio
private String pageStartMarker;
- private S3ObjectType type;
+ private long startDate;
- private long version;
+ private S3ObjectType type;
// Constructor
@@ -61,6 +63,13 @@ public GetObjectsWithFullDetailsSpectraS3Request withBucketId(final String bucke
}
+ public GetObjectsWithFullDetailsSpectraS3Request withEndDate(final long endDate) {
+ this.endDate = endDate;
+ this.updateQueryParam("end_date", endDate);
+ return this;
+ }
+
+
public GetObjectsWithFullDetailsSpectraS3Request withIncludePhysicalPlacement(final boolean includePhysicalPlacement) {
this.includePhysicalPlacement = includePhysicalPlacement;
if (this.includePhysicalPlacement) {
@@ -125,16 +134,16 @@ public GetObjectsWithFullDetailsSpectraS3Request withPageStartMarker(final Strin
}
- public GetObjectsWithFullDetailsSpectraS3Request withType(final S3ObjectType type) {
- this.type = type;
- this.updateQueryParam("type", type);
+ public GetObjectsWithFullDetailsSpectraS3Request withStartDate(final long startDate) {
+ this.startDate = startDate;
+ this.updateQueryParam("start_date", startDate);
return this;
}
- public GetObjectsWithFullDetailsSpectraS3Request withVersion(final long version) {
- this.version = version;
- this.updateQueryParam("version", version);
+ public GetObjectsWithFullDetailsSpectraS3Request withType(final S3ObjectType type) {
+ this.type = type;
+ this.updateQueryParam("type", type);
return this;
}
@@ -155,6 +164,11 @@ public String getBucketId() {
}
+ public long getEndDate() {
+ return this.endDate;
+ }
+
+
public boolean getIncludePhysicalPlacement() {
return this.includePhysicalPlacement;
}
@@ -190,13 +204,13 @@ public String getPageStartMarker() {
}
- public S3ObjectType getType() {
- return this.type;
+ public long getStartDate() {
+ return this.startDate;
}
- public long getVersion() {
- return this.version;
+ public S3ObjectType getType() {
+ return this.type;
}
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsSpectraS3Request.java
index 0e0ae220c..5d229218f 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsSpectraS3Request.java
@@ -27,7 +27,6 @@
import java.util.List;
import java.nio.charset.Charset;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import java.util.UUID;
import com.google.common.net.UrlEscapers;
public class GetPhysicalPlacementForObjectsSpectraS3Request extends AbstractRequest {
@@ -38,7 +37,7 @@ public class GetPhysicalPlacementForObjectsSpectraS3Request extends AbstractRequ
private final List objects;
- private String storageDomainId;
+ private String storageDomain;
private long size = 0;
// Constructor
@@ -52,16 +51,9 @@ public GetPhysicalPlacementForObjectsSpectraS3Request(final String bucketName, f
}
- public GetPhysicalPlacementForObjectsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
- return this;
- }
-
-
- public GetPhysicalPlacementForObjectsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetPhysicalPlacementForObjectsSpectraS3Request withStorageDomain(final String storageDomain) {
+ this.storageDomain = storageDomain;
+ this.updateQueryParam("storage_domain", storageDomain);
return this;
}
@@ -107,8 +99,8 @@ public List getObjects() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
index 891dd21f5..823687e4b 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
@@ -27,7 +27,6 @@
import java.util.List;
import java.nio.charset.Charset;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import java.util.UUID;
import com.google.common.net.UrlEscapers;
public class GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request extends AbstractRequest {
@@ -38,7 +37,7 @@ public class GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request exten
private final List objects;
- private String storageDomainId;
+ private String storageDomain;
private long size = 0;
// Constructor
@@ -53,16 +52,9 @@ public GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request(final Strin
this.getQueryParams().put("full_details", null);
}
- public GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
- return this;
- }
-
-
- public GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomain(final String storageDomain) {
+ this.storageDomain = storageDomain;
+ this.updateQueryParam("storage_domain", storageDomain);
return this;
}
@@ -108,8 +100,8 @@ public List getObjects() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPoolsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPoolsSpectraS3Request.java
index b783870c7..be1317a65 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPoolsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetPoolsSpectraS3Request.java
@@ -55,7 +55,7 @@ public class GetPoolsSpectraS3Request extends AbstractPaginationRequest {
private PoolState state;
- private String storageDomainId;
+ private String storageDomainMemberId;
private PoolType type;
@@ -175,16 +175,16 @@ public GetPoolsSpectraS3Request withState(final PoolState state) {
}
- public GetPoolsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetPoolsSpectraS3Request withStorageDomainMemberId(final UUID storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId.toString();
+ this.updateQueryParam("storage_domain_member_id", storageDomainMemberId);
return this;
}
- public GetPoolsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetPoolsSpectraS3Request withStorageDomainMemberId(final String storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId;
+ this.updateQueryParam("storage_domain_member_id", storageDomainMemberId);
return this;
}
@@ -272,8 +272,8 @@ public PoolState getState() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomainMemberId() {
+ return this.storageDomainMemberId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetSuspectObjectsWithFullDetailsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetSuspectObjectsWithFullDetailsSpectraS3Request.java
index 3622a162a..6cda546d6 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetSuspectObjectsWithFullDetailsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetSuspectObjectsWithFullDetailsSpectraS3Request.java
@@ -19,7 +19,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import com.google.common.net.UrlEscapers;
-import java.util.UUID;
public class GetSuspectObjectsWithFullDetailsSpectraS3Request extends AbstractRequest {
@@ -27,7 +26,7 @@ public class GetSuspectObjectsWithFullDetailsSpectraS3Request extends AbstractRe
private String bucketId;
- private String storageDomainId;
+ private String storageDomain;
// Constructor
@@ -44,16 +43,9 @@ public GetSuspectObjectsWithFullDetailsSpectraS3Request withBucketId(final Strin
}
- public GetSuspectObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
- return this;
- }
-
-
- public GetSuspectObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetSuspectObjectsWithFullDetailsSpectraS3Request withStorageDomain(final String storageDomain) {
+ this.storageDomain = storageDomain;
+ this.updateQueryParam("storage_domain", storageDomain);
return this;
}
@@ -74,8 +66,8 @@ public String getBucketId() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetTapesSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetTapesSpectraS3Request.java
index 5a9330fc9..1d6e8b682 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetTapesSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/GetTapesSpectraS3Request.java
@@ -65,7 +65,7 @@ public class GetTapesSpectraS3Request extends AbstractPaginationRequest {
private TapeState state;
- private String storageDomainId;
+ private String storageDomainMemberId;
private String type;
@@ -224,16 +224,16 @@ public GetTapesSpectraS3Request withState(final TapeState state) {
}
- public GetTapesSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetTapesSpectraS3Request withStorageDomainMemberId(final UUID storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId.toString();
+ this.updateQueryParam("storage_domain_member_id", storageDomainMemberId);
return this;
}
- public GetTapesSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public GetTapesSpectraS3Request withStorageDomainMemberId(final String storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId;
+ this.updateQueryParam("storage_domain_member_id", storageDomainMemberId);
return this;
}
@@ -360,8 +360,8 @@ public TapeState getState() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomainMemberId() {
+ return this.storageDomainMemberId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllPoolsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllPoolsSpectraS3Request.java
index d9e13c021..e78f30c52 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllPoolsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllPoolsSpectraS3Request.java
@@ -18,7 +18,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
import com.spectralogic.ds3client.models.Priority;
@@ -27,8 +26,6 @@ public class ImportAllPoolsSpectraS3Request extends AbstractRequest {
// Variables
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -50,13 +47,6 @@ public ImportAllPoolsSpectraS3Request() {
}
- public ImportAllPoolsSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportAllPoolsSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -131,11 +121,6 @@ public String getPath() {
return "/_rest_/pool";
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllTapesSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllTapesSpectraS3Request.java
index d7c174b90..2120c7cf7 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllTapesSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAllTapesSpectraS3Request.java
@@ -18,7 +18,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
import com.spectralogic.ds3client.models.Priority;
@@ -27,8 +26,6 @@ public class ImportAllTapesSpectraS3Request extends AbstractRequest {
// Variables
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -50,13 +47,6 @@ public ImportAllTapesSpectraS3Request() {
}
- public ImportAllTapesSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportAllTapesSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -131,11 +121,6 @@ public String getPath() {
return "/_rest_/tape";
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAzureTargetSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAzureTargetSpectraS3Request.java
index 55c99503d..c92c57cd2 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAzureTargetSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportAzureTargetSpectraS3Request.java
@@ -19,7 +19,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import com.google.common.net.UrlEscapers;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.spectralogic.ds3client.models.Priority;
@@ -31,8 +30,6 @@ public class ImportAzureTargetSpectraS3Request extends AbstractRequest {
private final String cloudBucketName;
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -52,13 +49,6 @@ public ImportAzureTargetSpectraS3Request(final String azureTarget, final String
}
- public ImportAzureTargetSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportAzureTargetSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -115,11 +105,6 @@ public String getCloudBucketName() {
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportPoolSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportPoolSpectraS3Request.java
index 4adf8a55b..91a744817 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportPoolSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportPoolSpectraS3Request.java
@@ -18,7 +18,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
import com.spectralogic.ds3client.models.Priority;
@@ -29,8 +28,6 @@ public class ImportPoolSpectraS3Request extends AbstractRequest {
private final String pool;
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -53,13 +50,6 @@ public ImportPoolSpectraS3Request(final String pool) {
}
- public ImportPoolSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportPoolSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -139,11 +129,6 @@ public String getPool() {
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportS3TargetSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportS3TargetSpectraS3Request.java
index 8cdf9878e..5350614f2 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportS3TargetSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportS3TargetSpectraS3Request.java
@@ -19,7 +19,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import com.google.common.net.UrlEscapers;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.spectralogic.ds3client.models.Priority;
@@ -31,8 +30,6 @@ public class ImportS3TargetSpectraS3Request extends AbstractRequest {
private final String cloudBucketName;
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -52,13 +49,6 @@ public ImportS3TargetSpectraS3Request(final String cloudBucketName, final String
}
- public ImportS3TargetSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportS3TargetSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -115,11 +105,6 @@ public String getCloudBucketName() {
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportTapeSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportTapeSpectraS3Request.java
index dc8bfd7f7..723b3e2c0 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportTapeSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ImportTapeSpectraS3Request.java
@@ -18,7 +18,6 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
import com.spectralogic.ds3client.models.Priority;
@@ -29,8 +28,6 @@ public class ImportTapeSpectraS3Request extends AbstractRequest {
private final String tapeId;
- private ImportConflictResolutionMode conflictResolutionMode;
-
private String dataPolicyId;
private Priority priority;
@@ -61,13 +58,6 @@ public ImportTapeSpectraS3Request(final String tapeId) {
}
- public ImportTapeSpectraS3Request withConflictResolutionMode(final ImportConflictResolutionMode conflictResolutionMode) {
- this.conflictResolutionMode = conflictResolutionMode;
- this.updateQueryParam("conflict_resolution_mode", conflictResolutionMode);
- return this;
- }
-
-
public ImportTapeSpectraS3Request withDataPolicyId(final UUID dataPolicyId) {
this.dataPolicyId = dataPolicyId.toString();
this.updateQueryParam("data_policy_id", dataPolicyId);
@@ -147,11 +137,6 @@ public String getTapeId() {
}
- public ImportConflictResolutionMode getConflictResolutionMode() {
- return this.conflictResolutionMode;
- }
-
-
public String getDataPolicyId() {
return this.dataPolicyId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPathBackendSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPathBackendSpectraS3Request.java
index 68851dc63..e58104856 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPathBackendSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPathBackendSpectraS3Request.java
@@ -20,7 +20,6 @@
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import java.lang.Integer;
import com.spectralogic.ds3client.models.AutoInspectMode;
-import com.spectralogic.ds3client.models.ImportConflictResolutionMode;
import com.spectralogic.ds3client.models.Priority;
import com.spectralogic.ds3client.models.UnavailableMediaUsagePolicy;
@@ -38,12 +37,12 @@ public class ModifyDataPathBackendSpectraS3Request extends AbstractRequest {
private int cacheAvailableRetryAfterInSeconds;
- private ImportConflictResolutionMode defaultImportConflictResolutionMode;
-
private Priority defaultVerifyDataAfterImport;
private boolean defaultVerifyDataPriorToImport;
+ private boolean iomEnabled;
+
private Integer partiallyVerifyLastPercentOfTapes;
private UnavailableMediaUsagePolicy unavailableMediaPolicy;
@@ -94,13 +93,6 @@ public ModifyDataPathBackendSpectraS3Request withCacheAvailableRetryAfterInSecon
}
- public ModifyDataPathBackendSpectraS3Request withDefaultImportConflictResolutionMode(final ImportConflictResolutionMode defaultImportConflictResolutionMode) {
- this.defaultImportConflictResolutionMode = defaultImportConflictResolutionMode;
- this.updateQueryParam("default_import_conflict_resolution_mode", defaultImportConflictResolutionMode);
- return this;
- }
-
-
public ModifyDataPathBackendSpectraS3Request withDefaultVerifyDataAfterImport(final Priority defaultVerifyDataAfterImport) {
this.defaultVerifyDataAfterImport = defaultVerifyDataAfterImport;
this.updateQueryParam("default_verify_data_after_import", defaultVerifyDataAfterImport);
@@ -115,6 +107,13 @@ public ModifyDataPathBackendSpectraS3Request withDefaultVerifyDataPriorToImport(
}
+ public ModifyDataPathBackendSpectraS3Request withIomEnabled(final boolean iomEnabled) {
+ this.iomEnabled = iomEnabled;
+ this.updateQueryParam("iom_enabled", iomEnabled);
+ return this;
+ }
+
+
public ModifyDataPathBackendSpectraS3Request withPartiallyVerifyLastPercentOfTapes(final Integer partiallyVerifyLastPercentOfTapes) {
this.partiallyVerifyLastPercentOfTapes = partiallyVerifyLastPercentOfTapes;
this.updateQueryParam("partially_verify_last_percent_of_tapes", partiallyVerifyLastPercentOfTapes);
@@ -179,11 +178,6 @@ public int getCacheAvailableRetryAfterInSeconds() {
}
- public ImportConflictResolutionMode getDefaultImportConflictResolutionMode() {
- return this.defaultImportConflictResolutionMode;
- }
-
-
public Priority getDefaultVerifyDataAfterImport() {
return this.defaultVerifyDataAfterImport;
}
@@ -194,6 +188,11 @@ public boolean getDefaultVerifyDataPriorToImport() {
}
+ public boolean getIomEnabled() {
+ return this.iomEnabled;
+ }
+
+
public Integer getPartiallyVerifyLastPercentOfTapes() {
return this.partiallyVerifyLastPercentOfTapes;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPolicySpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPolicySpectraS3Request.java
index 945506790..e5598676f 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPolicySpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyDataPolicySpectraS3Request.java
@@ -51,6 +51,8 @@ public class ModifyDataPolicySpectraS3Request extends AbstractRequest {
private boolean endToEndCrcRequired;
+ private int maxVersionsToKeep;
+
private String name;
private Priority rebuildPriority;
@@ -141,6 +143,13 @@ public ModifyDataPolicySpectraS3Request withEndToEndCrcRequired(final boolean en
}
+ public ModifyDataPolicySpectraS3Request withMaxVersionsToKeep(final int maxVersionsToKeep) {
+ this.maxVersionsToKeep = maxVersionsToKeep;
+ this.updateQueryParam("max_versions_to_keep", maxVersionsToKeep);
+ return this;
+ }
+
+
public ModifyDataPolicySpectraS3Request withName(final String name) {
this.name = name;
this.updateQueryParam("name", name);
@@ -228,6 +237,11 @@ public boolean getEndToEndCrcRequired() {
}
+ public int getMaxVersionsToKeep() {
+ return this.maxVersionsToKeep;
+ }
+
+
public String getName() {
return this.name;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyStorageDomainMemberSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyStorageDomainMemberSpectraS3Request.java
index 5fe3583a4..e4a6c6463 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyStorageDomainMemberSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyStorageDomainMemberSpectraS3Request.java
@@ -18,6 +18,8 @@
import com.spectralogic.ds3client.networking.HttpVerb;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
+import java.lang.Integer;
+import com.spectralogic.ds3client.models.StorageDomainMemberState;
import com.spectralogic.ds3client.models.WritePreferenceLevel;
import com.google.common.net.UrlEscapers;
@@ -27,6 +29,10 @@ public class ModifyStorageDomainMemberSpectraS3Request extends AbstractRequest {
private final String storageDomainMember;
+ private Integer autoCompactionThreshold;
+
+ private StorageDomainMemberState state;
+
private WritePreferenceLevel writePreference;
// Constructor
@@ -37,6 +43,20 @@ public ModifyStorageDomainMemberSpectraS3Request(final String storageDomainMembe
}
+ public ModifyStorageDomainMemberSpectraS3Request withAutoCompactionThreshold(final Integer autoCompactionThreshold) {
+ this.autoCompactionThreshold = autoCompactionThreshold;
+ this.updateQueryParam("auto_compaction_threshold", autoCompactionThreshold);
+ return this;
+ }
+
+
+ public ModifyStorageDomainMemberSpectraS3Request withState(final StorageDomainMemberState state) {
+ this.state = state;
+ this.updateQueryParam("state", state);
+ return this;
+ }
+
+
public ModifyStorageDomainMemberSpectraS3Request withWritePreference(final WritePreferenceLevel writePreference) {
this.writePreference = writePreference;
this.updateQueryParam("write_preference", writePreference);
@@ -60,6 +80,16 @@ public String getStorageDomainMember() {
}
+ public Integer getAutoCompactionThreshold() {
+ return this.autoCompactionThreshold;
+ }
+
+
+ public StorageDomainMemberState getState() {
+ return this.state;
+ }
+
+
public WritePreferenceLevel getWritePreference() {
return this.writePreference;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyTapePartitionSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyTapePartitionSpectraS3Request.java
index d59f129a3..2607b4797 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyTapePartitionSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyTapePartitionSpectraS3Request.java
@@ -27,12 +27,16 @@ public class ModifyTapePartitionSpectraS3Request extends AbstractRequest {
private final String tapePartition;
+ private boolean autoCompactionEnabled;
+
private int minimumReadReservedDrives;
private int minimumWriteReservedDrives;
private Quiesced quiesced;
+ private String serialNumber;
+
// Constructor
@@ -41,6 +45,13 @@ public ModifyTapePartitionSpectraS3Request(final String tapePartition) {
}
+ public ModifyTapePartitionSpectraS3Request withAutoCompactionEnabled(final boolean autoCompactionEnabled) {
+ this.autoCompactionEnabled = autoCompactionEnabled;
+ this.updateQueryParam("auto_compaction_enabled", autoCompactionEnabled);
+ return this;
+ }
+
+
public ModifyTapePartitionSpectraS3Request withMinimumReadReservedDrives(final int minimumReadReservedDrives) {
this.minimumReadReservedDrives = minimumReadReservedDrives;
this.updateQueryParam("minimum_read_reserved_drives", minimumReadReservedDrives);
@@ -62,6 +73,13 @@ public ModifyTapePartitionSpectraS3Request withQuiesced(final Quiesced quiesced)
}
+ public ModifyTapePartitionSpectraS3Request withSerialNumber(final String serialNumber) {
+ this.serialNumber = serialNumber;
+ this.updateQueryParam("serial_number", serialNumber);
+ return this;
+ }
+
+
@Override
public HttpVerb getVerb() {
@@ -78,6 +96,11 @@ public String getTapePartition() {
}
+ public boolean getAutoCompactionEnabled() {
+ return this.autoCompactionEnabled;
+ }
+
+
public int getMinimumReadReservedDrives() {
return this.minimumReadReservedDrives;
}
@@ -92,4 +115,9 @@ public Quiesced getQuiesced() {
return this.quiesced;
}
+
+ public String getSerialNumber() {
+ return this.serialNumber;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyUserSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyUserSpectraS3Request.java
index a4350dd3d..2e80d47a2 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyUserSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/ModifyUserSpectraS3Request.java
@@ -29,6 +29,8 @@ public class ModifyUserSpectraS3Request extends AbstractRequest {
private String defaultDataPolicyId;
+ private int maxBuckets;
+
private String name;
private String secretKey;
@@ -61,6 +63,13 @@ public ModifyUserSpectraS3Request withDefaultDataPolicyId(final String defaultDa
}
+ public ModifyUserSpectraS3Request withMaxBuckets(final int maxBuckets) {
+ this.maxBuckets = maxBuckets;
+ this.updateQueryParam("max_buckets", maxBuckets);
+ return this;
+ }
+
+
public ModifyUserSpectraS3Request withName(final String name) {
this.name = name;
this.updateQueryParam("name", name);
@@ -96,6 +105,11 @@ public String getDefaultDataPolicyId() {
}
+ public int getMaxBuckets() {
+ return this.maxBuckets;
+ }
+
+
public String getName() {
return this.name;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutDataPolicySpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutDataPolicySpectraS3Request.java
index 0626a9a40..634ad0b16 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutDataPolicySpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutDataPolicySpectraS3Request.java
@@ -50,6 +50,8 @@ public class PutDataPolicySpectraS3Request extends AbstractRequest {
private boolean endToEndCrcRequired;
+ private int maxVersionsToKeep;
+
private Priority rebuildPriority;
private VersioningLevel versioning;
@@ -134,6 +136,13 @@ public PutDataPolicySpectraS3Request withEndToEndCrcRequired(final boolean endTo
}
+ public PutDataPolicySpectraS3Request withMaxVersionsToKeep(final int maxVersionsToKeep) {
+ this.maxVersionsToKeep = maxVersionsToKeep;
+ this.updateQueryParam("max_versions_to_keep", maxVersionsToKeep);
+ return this;
+ }
+
+
public PutDataPolicySpectraS3Request withRebuildPriority(final Priority rebuildPriority) {
this.rebuildPriority = rebuildPriority;
this.updateQueryParam("rebuild_priority", rebuildPriority);
@@ -214,6 +223,11 @@ public boolean getEndToEndCrcRequired() {
}
+ public int getMaxVersionsToKeep() {
+ return this.maxVersionsToKeep;
+ }
+
+
public Priority getRebuildPriority() {
return this.rebuildPriority;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutTapeStorageDomainMemberSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutTapeStorageDomainMemberSpectraS3Request.java
index c74c01fd6..3c44e3a23 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutTapeStorageDomainMemberSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/PutTapeStorageDomainMemberSpectraS3Request.java
@@ -20,6 +20,7 @@
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
import java.util.UUID;
import com.google.common.net.UrlEscapers;
+import java.lang.Integer;
import com.spectralogic.ds3client.models.WritePreferenceLevel;
public class PutTapeStorageDomainMemberSpectraS3Request extends AbstractRequest {
@@ -32,6 +33,8 @@ public class PutTapeStorageDomainMemberSpectraS3Request extends AbstractRequest
private final String tapeType;
+ private Integer autoCompactionThreshold;
+
private WritePreferenceLevel writePreference;
// Constructor
@@ -64,6 +67,13 @@ public PutTapeStorageDomainMemberSpectraS3Request(final String storageDomainId,
}
+ public PutTapeStorageDomainMemberSpectraS3Request withAutoCompactionThreshold(final Integer autoCompactionThreshold) {
+ this.autoCompactionThreshold = autoCompactionThreshold;
+ this.updateQueryParam("auto_compaction_threshold", autoCompactionThreshold);
+ return this;
+ }
+
+
public PutTapeStorageDomainMemberSpectraS3Request withWritePreference(final WritePreferenceLevel writePreference) {
this.writePreference = writePreference;
this.updateQueryParam("write_preference", writePreference);
@@ -97,6 +107,11 @@ public String getTapeType() {
}
+ public Integer getAutoCompactionThreshold() {
+ return this.autoCompactionThreshold;
+ }
+
+
public WritePreferenceLevel getWritePreference() {
return this.writePreference;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Request.java
new file mode 100644
index 000000000..62c7a27e4
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Request.java
@@ -0,0 +1,65 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.spectrads3;
+
+import com.spectralogic.ds3client.BulkCommand;
+import com.spectralogic.ds3client.models.bulk.Ds3Object;
+import com.spectralogic.ds3client.commands.interfaces.BulkRequest;
+import com.google.common.net.UrlEscapers;
+import com.spectralogic.ds3client.models.Priority;
+
+public class StageObjectsJobSpectraS3Request extends BulkRequest {
+
+
+
+ private String name;
+
+ // Constructor
+
+ public StageObjectsJobSpectraS3Request(final String bucketName, final Iterable objects) {
+ super(bucketName, objects);
+
+ this.getQueryParams().put("operation", "start_bulk_stage");
+
+ }
+
+ public StageObjectsJobSpectraS3Request withName(final String name) {
+ this.name = name;
+ this.updateQueryParam("name", name);
+ return this;
+ }
+
+
+ @Override
+ public StageObjectsJobSpectraS3Request withPriority(final Priority priority) {
+ super.withPriority(priority);
+ return this;
+ }
+
+
+
+
+ public String getName() {
+ return this.name;
+ }
+
+
+ @Override
+ public BulkCommand getCommand() {
+ return BulkCommand.GET;
+ }
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Response.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Response.java
new file mode 100644
index 000000000..c7388485b
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/StageObjectsJobSpectraS3Response.java
@@ -0,0 +1,36 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.spectrads3;
+
+import com.spectralogic.ds3client.models.MasterObjectList;
+import com.spectralogic.ds3client.models.ChecksumType;
+import com.spectralogic.ds3client.commands.interfaces.AbstractResponse;
+
+public class StageObjectsJobSpectraS3Response extends AbstractResponse {
+
+ private final MasterObjectList masterObjectListResult;
+
+ public StageObjectsJobSpectraS3Response(final MasterObjectList masterObjectListResult, final String checksum, final ChecksumType.Type checksumType) {
+ super(checksum, checksumType);
+ this.masterObjectListResult = masterObjectListResult;
+ }
+
+ public MasterObjectList getMasterObjectListResult() {
+ return this.masterObjectListResult;
+ }
+
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Request.java
new file mode 100644
index 000000000..353eea17f
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Request.java
@@ -0,0 +1,86 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.spectrads3;
+
+import com.spectralogic.ds3client.networking.HttpVerb;
+import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
+import com.google.common.net.UrlEscapers;
+import java.util.UUID;
+
+public class UndeleteObjectSpectraS3Request extends AbstractRequest {
+
+ // Variables
+
+ private final String bucketId;
+
+ private final String name;
+
+ private String versionId;
+
+ // Constructor
+
+
+ public UndeleteObjectSpectraS3Request(final String bucketId, final String name) {
+ this.bucketId = bucketId;
+ this.name = name;
+
+ this.updateQueryParam("bucket_id", bucketId);
+
+ this.updateQueryParam("name", name);
+
+ }
+
+ public UndeleteObjectSpectraS3Request withVersionId(final UUID versionId) {
+ this.versionId = versionId.toString();
+ this.updateQueryParam("version_id", versionId);
+ return this;
+ }
+
+
+ public UndeleteObjectSpectraS3Request withVersionId(final String versionId) {
+ this.versionId = versionId;
+ this.updateQueryParam("version_id", versionId);
+ return this;
+ }
+
+
+
+ @Override
+ public HttpVerb getVerb() {
+ return HttpVerb.PUT;
+ }
+
+ @Override
+ public String getPath() {
+ return "/_rest_/object";
+ }
+
+ public String getBucketId() {
+ return this.bucketId;
+ }
+
+
+ public String getName() {
+ return this.name;
+ }
+
+
+ public String getVersionId() {
+ return this.versionId;
+ }
+
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Response.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Response.java
new file mode 100644
index 000000000..a271af52f
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/UndeleteObjectSpectraS3Response.java
@@ -0,0 +1,36 @@
+/*
+ * ******************************************************************************
+ * Copyright 2014-2017 Spectra Logic Corporation. All Rights Reserved.
+ * Licensed under the Apache License, Version 2.0 (the "License"). You may not use
+ * this file except in compliance with the License. A copy of the License is located at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * or in the "license" file accompanying this file.
+ * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ * CONDITIONS OF ANY KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations under the License.
+ * ****************************************************************************
+ */
+
+// This code is auto-generated, do not modify
+package com.spectralogic.ds3client.commands.spectrads3;
+
+import com.spectralogic.ds3client.models.S3Object;
+import com.spectralogic.ds3client.models.ChecksumType;
+import com.spectralogic.ds3client.commands.interfaces.AbstractResponse;
+
+public class UndeleteObjectSpectraS3Response extends AbstractResponse {
+
+ private final S3Object s3ObjectResult;
+
+ public UndeleteObjectSpectraS3Response(final S3Object s3ObjectResult, final String checksum, final ChecksumType.Type checksumType) {
+ super(checksum, checksumType);
+ this.s3ObjectResult = s3ObjectResult;
+ }
+
+ public S3Object getS3ObjectResult() {
+ return this.s3ObjectResult;
+ }
+
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsSpectraS3Request.java
index 6a1f7f72c..4057799e1 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsSpectraS3Request.java
@@ -27,7 +27,6 @@
import java.util.List;
import java.nio.charset.Charset;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import java.util.UUID;
import com.google.common.net.UrlEscapers;
public class VerifyPhysicalPlacementForObjectsSpectraS3Request extends AbstractRequest {
@@ -38,7 +37,7 @@ public class VerifyPhysicalPlacementForObjectsSpectraS3Request extends AbstractR
private final List objects;
- private String storageDomainId;
+ private String storageDomain;
private long size = 0;
// Constructor
@@ -52,16 +51,9 @@ public VerifyPhysicalPlacementForObjectsSpectraS3Request(final String bucketName
}
- public VerifyPhysicalPlacementForObjectsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
- return this;
- }
-
-
- public VerifyPhysicalPlacementForObjectsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public VerifyPhysicalPlacementForObjectsSpectraS3Request withStorageDomain(final String storageDomain) {
+ this.storageDomain = storageDomain;
+ this.updateQueryParam("storage_domain", storageDomain);
return this;
}
@@ -107,8 +99,8 @@ public List getObjects() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
index 98b0597fb..0f4ee9d73 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/commands/spectrads3/VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request.java
@@ -27,7 +27,6 @@
import java.util.List;
import java.nio.charset.Charset;
import com.spectralogic.ds3client.commands.interfaces.AbstractRequest;
-import java.util.UUID;
import com.google.common.net.UrlEscapers;
public class VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request extends AbstractRequest {
@@ -38,7 +37,7 @@ public class VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request ex
private final List objects;
- private String storageDomainId;
+ private String storageDomain;
private long size = 0;
// Constructor
@@ -53,16 +52,9 @@ public VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request(final St
this.getQueryParams().put("full_details", null);
}
- public VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId.toString();
- this.updateQueryParam("storage_domain_id", storageDomainId);
- return this;
- }
-
-
- public VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomainId(final String storageDomainId) {
- this.storageDomainId = storageDomainId;
- this.updateQueryParam("storage_domain_id", storageDomainId);
+ public VerifyPhysicalPlacementForObjectsWithFullDetailsSpectraS3Request withStorageDomain(final String storageDomain) {
+ this.storageDomain = storageDomain;
+ this.updateQueryParam("storage_domain", storageDomain);
return this;
}
@@ -108,8 +100,8 @@ public List getObjects() {
}
- public String getStorageDomainId() {
- return this.storageDomainId;
+ public String getStorageDomain() {
+ return this.storageDomain;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/JobState.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/JobState.java
index f4abf11d7..6851e22e8 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/JobState.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/JobState.java
@@ -79,7 +79,7 @@ private static class BlobIdentityDecorator {
private final PhysicalPlacement physicalPlacement;
- private final long version;
+ private final UUID versionId;
private BlobIdentityDecorator(final BulkObject blob) {
this.bucket = blob.getBucket();
@@ -89,7 +89,7 @@ private BlobIdentityDecorator(final BulkObject blob) {
this.name = blob.getName();
this.offset = blob.getOffset();
this.physicalPlacement = blob.getPhysicalPlacement();
- this.version = blob.getVersion();
+ this.versionId = blob.getVersionId();
}
@Override
@@ -102,7 +102,7 @@ public boolean equals(final Object o) {
if (latest != that.latest) return false;
if (length != that.length) return false;
if (offset != that.offset) return false;
- if (version != that.version) return false;
+ if (versionId != null ? !versionId.equals(that.versionId) : that.versionId != null) return false;
if (bucket != null ? !bucket.equals(that.bucket) : that.bucket != null) return false;
if (id != null ? !id.equals(that.id) : that.id != null) return false;
if (name != null ? !name.equals(that.name) : that.name != null) return false;
@@ -111,7 +111,7 @@ public boolean equals(final Object o) {
@Override
public int hashCode() {
- return java.util.Objects.hash(bucket, id, latest, length, name, offset, physicalPlacement, version);
+ return java.util.Objects.hash(bucket, id, latest, length, name, offset, physicalPlacement, versionId);
}
@Override
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobPartialBlobTransferMethod.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobPartialBlobTransferMethod.java
index dc8bc3b56..3fa3c9eab 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobPartialBlobTransferMethod.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobPartialBlobTransferMethod.java
@@ -92,6 +92,9 @@ private GetObjectRequest makeGetObjectRequest(final SeekableByteChannel seekable
jobId,
blob.getOffset());
+ if (blob.getVersionId() != null) {
+ getObjectRequest.withVersionId(blob.getVersionId());
+ }
getObjectRequest.withByteRanges(blobRanges);
return getObjectRequest;
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobTransferMethod.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobTransferMethod.java
index 3a174145d..3a7c8c1d5 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobTransferMethod.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/helpers/strategy/transferstrategy/GetJobTransferMethod.java
@@ -86,6 +86,10 @@ private GetObjectRequest makeGetObjectRequest(final SeekableByteChannel seekable
jobId,
blob.getOffset());
+ if (jobPart.getBlob().getVersionId() != null) {
+ getObjectRequest.withVersionId(jobPart.getBlob().getVersionId());
+ }
+
final ImmutableCollection rangesForBlob = StrategyUtils.getRangesForBlob(rangesForBlobs, blob);
if (rangesForBlob != null) {
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ActiveJob.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ActiveJob.java
index de63306c6..9179c432f 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ActiveJob.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ActiveJob.java
@@ -79,6 +79,9 @@ public class ActiveJob {
@JsonProperty("RequestType")
private JobRequestType requestType;
+ @JsonProperty("Restore")
+ private JobRestore restore;
+
@JsonProperty("Truncated")
private boolean truncated;
@@ -260,6 +263,15 @@ public void setRequestType(final JobRequestType requestType) {
}
+ public JobRestore getRestore() {
+ return this.restore;
+ }
+
+ public void setRestore(final JobRestore restore) {
+ this.restore = restore;
+ }
+
+
public boolean getTruncated() {
return this.truncated;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/BulkObject.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/BulkObject.java
index e2d214aa2..8f321418a 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/BulkObject.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/BulkObject.java
@@ -50,8 +50,8 @@ public class BulkObject {
@JsonProperty("PhysicalPlacement")
private PhysicalPlacement physicalPlacement;
- @JacksonXmlProperty(isAttribute = true, localName = "Version")
- private long version;
+ @JacksonXmlProperty(isAttribute = true, localName = "VersionId")
+ private UUID versionId;
// Constructor
public BulkObject() {
@@ -132,18 +132,18 @@ public void setPhysicalPlacement(final PhysicalPlacement physicalPlacement) {
}
- public long getVersion() {
- return this.version;
+ public UUID getVersionId() {
+ return this.versionId;
}
- public void setVersion(final long version) {
- this.version = version;
+ public void setVersionId(final UUID versionId) {
+ this.versionId = versionId;
}
@Override
public int hashCode() {
- return java.util.Objects.hash(id, inCache, latest, length, name, offset, physicalPlacement, version);
+ return java.util.Objects.hash(id, inCache, latest, length, name, offset, physicalPlacement, versionId);
}
@Override
@@ -161,7 +161,7 @@ && nullableEquals(this.getInCache(), bulkObject.getInCache())
&& nullableEquals(this.getName(), bulkObject.getName())
&& this.getOffset() == bulkObject.getOffset()
&& this.getPhysicalPlacement() == bulkObject.getPhysicalPlacement()
- && this.getVersion() == bulkObject.getVersion();
+ && nullableEquals(this.getVersionId(), bulkObject.getVersionId());
}
/**
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Contents.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Contents.java
index 9f5f97dd4..217d6dffb 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Contents.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Contents.java
@@ -18,7 +18,9 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import java.lang.Boolean;
import java.util.Date;
+import java.util.UUID;
@JacksonXmlRootElement(namespace = "Data")
public class Contents {
@@ -27,6 +29,9 @@ public class Contents {
@JsonProperty("ETag")
private String eTag;
+ @JsonProperty("IsLatest")
+ private Boolean isLatest;
+
@JsonProperty("Key")
private String key;
@@ -42,6 +47,9 @@ public class Contents {
@JsonProperty("StorageClass")
private String storageClass;
+ @JsonProperty("VersionId")
+ private UUID versionId;
+
// Constructor
public Contents() {
//pass
@@ -58,6 +66,15 @@ public void setETag(final String eTag) {
}
+ public Boolean getIsLatest() {
+ return this.isLatest;
+ }
+
+ public void setIsLatest(final Boolean isLatest) {
+ this.isLatest = isLatest;
+ }
+
+
public String getKey() {
return this.key;
}
@@ -102,4 +119,13 @@ public void setStorageClass(final String storageClass) {
this.storageClass = storageClass;
}
+
+ public UUID getVersionId() {
+ return this.versionId;
+ }
+
+ public void setVersionId(final UUID versionId) {
+ this.versionId = versionId;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPathBackend.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPathBackend.java
index b5e9cbba1..94a5ba2f3 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPathBackend.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPathBackend.java
@@ -40,9 +40,6 @@ public class DataPathBackend {
@JsonProperty("CacheAvailableRetryAfterInSeconds")
private int cacheAvailableRetryAfterInSeconds;
- @JsonProperty("DefaultImportConflictResolutionMode")
- private ImportConflictResolutionMode defaultImportConflictResolutionMode;
-
@JsonProperty("DefaultVerifyDataAfterImport")
private Priority defaultVerifyDataAfterImport;
@@ -55,6 +52,9 @@ public class DataPathBackend {
@JsonProperty("InstanceId")
private UUID instanceId;
+ @JsonProperty("IomEnabled")
+ private boolean iomEnabled;
+
@JsonProperty("LastHeartbeat")
private Date lastHeartbeat;
@@ -122,15 +122,6 @@ public void setCacheAvailableRetryAfterInSeconds(final int cacheAvailableRetryAf
}
- public ImportConflictResolutionMode getDefaultImportConflictResolutionMode() {
- return this.defaultImportConflictResolutionMode;
- }
-
- public void setDefaultImportConflictResolutionMode(final ImportConflictResolutionMode defaultImportConflictResolutionMode) {
- this.defaultImportConflictResolutionMode = defaultImportConflictResolutionMode;
- }
-
-
public Priority getDefaultVerifyDataAfterImport() {
return this.defaultVerifyDataAfterImport;
}
@@ -167,6 +158,15 @@ public void setInstanceId(final UUID instanceId) {
}
+ public boolean getIomEnabled() {
+ return this.iomEnabled;
+ }
+
+ public void setIomEnabled(final boolean iomEnabled) {
+ this.iomEnabled = iomEnabled;
+ }
+
+
public Date getLastHeartbeat() {
return this.lastHeartbeat;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPolicy.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPolicy.java
index 3e7ad9e22..a7d8db4c3 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPolicy.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DataPolicy.java
@@ -31,9 +31,6 @@ public class DataPolicy {
@JsonProperty("AlwaysMinimizeSpanningAcrossMedia")
private boolean alwaysMinimizeSpanningAcrossMedia;
- @JsonProperty("AlwaysReplicateDeletes")
- private boolean alwaysReplicateDeletes;
-
@JsonProperty("BlobbingEnabled")
private boolean blobbingEnabled;
@@ -64,8 +61,8 @@ public class DataPolicy {
@JsonProperty("Id")
private UUID id;
- @JsonProperty("LtfsObjectNamingAllowed")
- private boolean ltfsObjectNamingAllowed;
+ @JsonProperty("MaxVersionsToKeep")
+ private int maxVersionsToKeep;
@JsonProperty("Name")
private String name;
@@ -101,15 +98,6 @@ public void setAlwaysMinimizeSpanningAcrossMedia(final boolean alwaysMinimizeSpa
}
- public boolean getAlwaysReplicateDeletes() {
- return this.alwaysReplicateDeletes;
- }
-
- public void setAlwaysReplicateDeletes(final boolean alwaysReplicateDeletes) {
- this.alwaysReplicateDeletes = alwaysReplicateDeletes;
- }
-
-
public boolean getBlobbingEnabled() {
return this.blobbingEnabled;
}
@@ -200,12 +188,12 @@ public void setId(final UUID id) {
}
- public boolean getLtfsObjectNamingAllowed() {
- return this.ltfsObjectNamingAllowed;
+ public int getMaxVersionsToKeep() {
+ return this.maxVersionsToKeep;
}
- public void setLtfsObjectNamingAllowed(final boolean ltfsObjectNamingAllowed) {
- this.ltfsObjectNamingAllowed = ltfsObjectNamingAllowed;
+ public void setMaxVersionsToKeep(final int maxVersionsToKeep) {
+ this.maxVersionsToKeep = maxVersionsToKeep;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DeleteObjectError.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DeleteObjectError.java
index 3335493e1..1df957b72 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DeleteObjectError.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DeleteObjectError.java
@@ -18,6 +18,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import java.util.UUID;
@JacksonXmlRootElement(namespace = "Data")
public class DeleteObjectError {
@@ -32,6 +33,9 @@ public class DeleteObjectError {
@JsonProperty("Message")
private String message;
+ @JsonProperty("VersionId")
+ private UUID versionId;
+
// Constructor
public DeleteObjectError() {
//pass
@@ -65,4 +69,13 @@ public void setMessage(final String message) {
this.message = message;
}
+
+ public UUID getVersionId() {
+ return this.versionId;
+ }
+
+ public void setVersionId(final UUID versionId) {
+ this.versionId = versionId;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedS3Object.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedS3Object.java
index 2228e4f59..78e2cea3f 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedS3Object.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedS3Object.java
@@ -67,9 +67,6 @@ public class DetailedS3Object {
@JsonProperty("Type")
private S3ObjectType type;
- @JsonProperty("Version")
- private long version;
-
// Constructor
public DetailedS3Object() {
//pass
@@ -202,13 +199,4 @@ public void setType(final S3ObjectType type) {
this.type = type;
}
-
- public long getVersion() {
- return this.version;
- }
-
- public void setVersion(final long version) {
- this.version = version;
- }
-
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedTapePartition.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedTapePartition.java
index 8008ca4f3..2fe64a482 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedTapePartition.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/DetailedTapePartition.java
@@ -27,6 +27,9 @@
public class DetailedTapePartition {
// Variables
+ @JsonProperty("AutoCompactionEnabled")
+ private boolean autoCompactionEnabled;
+
@JsonProperty("DriveType")
private TapeDriveType driveType;
@@ -58,9 +61,6 @@ public class DetailedTapePartition {
@JsonProperty("Quiesced")
private Quiesced quiesced;
- @JsonProperty("SerialId")
- private String serialId;
-
@JsonProperty("SerialNumber")
private String serialNumber;
@@ -78,6 +78,15 @@ public DetailedTapePartition() {
// Getters and Setters
+ public boolean getAutoCompactionEnabled() {
+ return this.autoCompactionEnabled;
+ }
+
+ public void setAutoCompactionEnabled(final boolean autoCompactionEnabled) {
+ this.autoCompactionEnabled = autoCompactionEnabled;
+ }
+
+
public TapeDriveType getDriveType() {
return this.driveType;
}
@@ -168,15 +177,6 @@ public void setQuiesced(final Quiesced quiesced) {
}
- public String getSerialId() {
- return this.serialId;
- }
-
- public void setSerialId(final String serialId) {
- this.serialId = serialId;
- }
-
-
public String getSerialNumber() {
return this.serialNumber;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ImportConflictResolutionMode.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/JobRestore.java
similarity index 89%
rename from ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ImportConflictResolutionMode.java
rename to ds3-sdk/src/main/java/com/spectralogic/ds3client/models/JobRestore.java
index bcd4bc4db..e15314c85 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ImportConflictResolutionMode.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/JobRestore.java
@@ -16,8 +16,8 @@
// This code is auto-generated, do not modify
package com.spectralogic.ds3client.models;
-public enum ImportConflictResolutionMode {
- CANCEL,
- ACCEPT_MOST_RECENT,
- ACCEPT_EXISTING
+public enum JobRestore {
+ NO,
+ YES,
+ PERMANENT_ONLY
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ListBucketResult.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ListBucketResult.java
index 96b1bf0d6..ae82147f2 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ListBucketResult.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/ListBucketResult.java
@@ -60,6 +60,10 @@ public class ListBucketResult {
@JsonProperty("IsTruncated")
private boolean truncated;
+ @JsonProperty("Version")
+ @JacksonXmlElementWrapper(useWrapping = false)
+ private List versionedObjects = new ArrayList<>();
+
// Constructor
public ListBucketResult() {
//pass
@@ -156,4 +160,13 @@ public void setTruncated(final boolean truncated) {
this.truncated = truncated;
}
+
+ public List getVersionedObjects() {
+ return this.versionedObjects;
+ }
+
+ public void setVersionedObjects(final List versionedObjects) {
+ this.versionedObjects = versionedObjects;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/NamedDetailedTapePartition.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/NamedDetailedTapePartition.java
index 3a683063e..46787b2cf 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/NamedDetailedTapePartition.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/NamedDetailedTapePartition.java
@@ -27,6 +27,9 @@
public class NamedDetailedTapePartition {
// Variables
+ @JsonProperty("AutoCompactionEnabled")
+ private boolean autoCompactionEnabled;
+
@JsonProperty("DriveType")
private TapeDriveType driveType;
@@ -58,9 +61,6 @@ public class NamedDetailedTapePartition {
@JsonProperty("Quiesced")
private Quiesced quiesced;
- @JsonProperty("SerialId")
- private String serialId;
-
@JsonProperty("SerialNumber")
private String serialNumber;
@@ -78,6 +78,15 @@ public NamedDetailedTapePartition() {
// Getters and Setters
+ public boolean getAutoCompactionEnabled() {
+ return this.autoCompactionEnabled;
+ }
+
+ public void setAutoCompactionEnabled(final boolean autoCompactionEnabled) {
+ this.autoCompactionEnabled = autoCompactionEnabled;
+ }
+
+
public TapeDriveType getDriveType() {
return this.driveType;
}
@@ -168,15 +177,6 @@ public void setQuiesced(final Quiesced quiesced) {
}
- public String getSerialId() {
- return this.serialId;
- }
-
- public void setSerialId(final String serialId) {
- this.serialId = serialId;
- }
-
-
public String getSerialNumber() {
return this.serialNumber;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Pool.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Pool.java
index 00581f1b8..86e19b17c 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Pool.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Pool.java
@@ -73,8 +73,8 @@ public class Pool {
@JsonProperty("State")
private PoolState state;
- @JsonProperty("StorageDomainId")
- private UUID storageDomainId;
+ @JsonProperty("StorageDomainMemberId")
+ private UUID storageDomainMemberId;
@JsonProperty("TotalCapacity")
private long totalCapacity;
@@ -236,12 +236,12 @@ public void setState(final PoolState state) {
}
- public UUID getStorageDomainId() {
- return this.storageDomainId;
+ public UUID getStorageDomainMemberId() {
+ return this.storageDomainMemberId;
}
- public void setStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId;
+ public void setStorageDomainMemberId(final UUID storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/RestOperationType.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/RestOperationType.java
index 9f951979b..0babc6ea6 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/RestOperationType.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/RestOperationType.java
@@ -36,6 +36,7 @@ public enum RestOperationType {
REGENERATE_SECRET_KEY,
START_BULK_GET,
START_BULK_PUT,
+ START_BULK_STAGE,
START_BULK_VERIFY,
VERIFY,
VERIFY_SAFE_TO_START_BULK_PUT,
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3Object.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3Object.java
index 39ff6894a..bcb4fc37c 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3Object.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3Object.java
@@ -44,9 +44,6 @@ public class S3Object {
@JsonProperty("Type")
private S3ObjectType type;
- @JsonProperty("Version")
- private long version;
-
// Constructor
public S3Object() {
//pass
@@ -108,18 +105,9 @@ public void setType(final S3ObjectType type) {
}
- public long getVersion() {
- return this.version;
- }
-
- public void setVersion(final long version) {
- this.version = version;
- }
-
-
@Override
public int hashCode() {
- return Objects.hash(bucketId, name, id, latest, creationDate, type, version);
+ return Objects.hash(bucketId, name, id, latest, creationDate, type);
}
@Override
@@ -135,7 +123,6 @@ public boolean equals(final Object obj) {
&& this.id.equals(s3obj.getId())
&& this.latest == s3obj.getLatest()
&& this.name.equals(s3obj.getName())
- && this.type == s3obj.getType()
- && this.version == s3obj.getVersion();
+ && this.type == s3obj.getType();
}
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3ObjectToDelete.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3ObjectToDelete.java
index b7dd8574f..9954a0f05 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3ObjectToDelete.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/S3ObjectToDelete.java
@@ -18,6 +18,7 @@
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import java.util.UUID;
@JacksonXmlRootElement(namespace = "Data")
public class S3ObjectToDelete {
@@ -26,6 +27,9 @@ public class S3ObjectToDelete {
@JsonProperty("Key")
private String key;
+ @JsonProperty("VersionId")
+ private UUID versionId;
+
// Constructor
public S3ObjectToDelete() {
//pass
@@ -41,4 +45,13 @@ public void setKey(final String key) {
this.key = key;
}
+
+ public UUID getVersionId() {
+ return this.versionId;
+ }
+
+ public void setVersionId(final UUID versionId) {
+ this.versionId = versionId;
+ }
+
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/SpectraUser.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/SpectraUser.java
index 9dd159b0c..5b47f2592 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/SpectraUser.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/SpectraUser.java
@@ -33,6 +33,9 @@ public class SpectraUser {
@JsonProperty("Id")
private UUID id;
+ @JsonProperty("MaxBuckets")
+ private int maxBuckets;
+
@JsonProperty("Name")
private String name;
@@ -73,6 +76,15 @@ public void setId(final UUID id) {
}
+ public int getMaxBuckets() {
+ return this.maxBuckets;
+ }
+
+ public void setMaxBuckets(final int maxBuckets) {
+ this.maxBuckets = maxBuckets;
+ }
+
+
public String getName() {
return this.name;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/StorageDomainMember.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/StorageDomainMember.java
index 971f592c7..5722fdca6 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/StorageDomainMember.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/StorageDomainMember.java
@@ -24,6 +24,9 @@
public class StorageDomainMember {
// Variables
+ @JsonProperty("AutoCompactionThreshold")
+ private Integer autoCompactionThreshold;
+
@JsonProperty("Id")
private UUID id;
@@ -52,6 +55,15 @@ public StorageDomainMember() {
// Getters and Setters
+ public Integer getAutoCompactionThreshold() {
+ return this.autoCompactionThreshold;
+ }
+
+ public void setAutoCompactionThreshold(final Integer autoCompactionThreshold) {
+ this.autoCompactionThreshold = autoCompactionThreshold;
+ }
+
+
public UUID getId() {
return this.id;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Tape.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Tape.java
index 4b6a50990..938b4ad5c 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Tape.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/Tape.java
@@ -85,8 +85,8 @@ public class Tape {
@JsonProperty("State")
private TapeState state;
- @JsonProperty("StorageDomainId")
- private UUID storageDomainId;
+ @JsonProperty("StorageDomainMemberId")
+ private UUID storageDomainMemberId;
@JsonProperty("TakeOwnershipPending")
private boolean takeOwnershipPending;
@@ -290,12 +290,12 @@ public void setState(final TapeState state) {
}
- public UUID getStorageDomainId() {
- return this.storageDomainId;
+ public UUID getStorageDomainMemberId() {
+ return this.storageDomainMemberId;
}
- public void setStorageDomainId(final UUID storageDomainId) {
- this.storageDomainId = storageDomainId;
+ public void setStorageDomainMemberId(final UUID storageDomainMemberId) {
+ this.storageDomainMemberId = storageDomainMemberId;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartition.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartition.java
index 52a962cd2..1def8e1a1 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartition.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartition.java
@@ -24,6 +24,9 @@
public class TapePartition {
// Variables
+ @JsonProperty("AutoCompactionEnabled")
+ private boolean autoCompactionEnabled;
+
@JsonProperty("DriveType")
private TapeDriveType driveType;
@@ -51,9 +54,6 @@ public class TapePartition {
@JsonProperty("Quiesced")
private Quiesced quiesced;
- @JsonProperty("SerialId")
- private String serialId;
-
@JsonProperty("SerialNumber")
private String serialNumber;
@@ -67,6 +67,15 @@ public TapePartition() {
// Getters and Setters
+ public boolean getAutoCompactionEnabled() {
+ return this.autoCompactionEnabled;
+ }
+
+ public void setAutoCompactionEnabled(final boolean autoCompactionEnabled) {
+ this.autoCompactionEnabled = autoCompactionEnabled;
+ }
+
+
public TapeDriveType getDriveType() {
return this.driveType;
}
@@ -148,15 +157,6 @@ public void setQuiesced(final Quiesced quiesced) {
}
- public String getSerialId() {
- return this.serialId;
- }
-
- public void setSerialId(final String serialId) {
- this.serialId = serialId;
- }
-
-
public String getSerialNumber() {
return this.serialNumber;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartitionFailureType.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartitionFailureType.java
index be8cdb2dd..5e1203ab7 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartitionFailureType.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapePartitionFailureType.java
@@ -31,5 +31,6 @@ public enum TapePartitionFailureType {
TAPE_DRIVE_TYPE_MISMATCH,
TAPE_EJECTION_BY_OPERATOR_REQUIRED,
TAPE_MEDIA_TYPE_INCOMPATIBLE,
- TAPE_REMOVAL_UNEXPECTED
+ TAPE_REMOVAL_UNEXPECTED,
+ TAPE_IN_INVALID_PARTITION
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapeState.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapeState.java
index d943bd7ab..a6a06f17b 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapeState.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/TapeState.java
@@ -38,6 +38,7 @@ public enum TapeState {
CANNOT_FORMAT_DUE_TO_WRITE_PROTECTION,
SERIAL_NUMBER_MISMATCH,
BAR_CODE_MISSING,
+ AUTO_COMPACTION_IN_PROGRESS,
FORMAT_PENDING,
FORMAT_IN_PROGRESS,
EJECT_TO_EE_IN_PROGRESS,
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/VersioningLevel.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/VersioningLevel.java
index 46ee8e863..05fa2be69 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/VersioningLevel.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/VersioningLevel.java
@@ -18,5 +18,6 @@
public enum VersioningLevel {
NONE,
- KEEP_LATEST
+ KEEP_LATEST,
+ KEEP_MULTIPLE_VERSIONS
}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3Object.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3Object.java
index ce860a7bf..4c4a831f6 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3Object.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3Object.java
@@ -15,16 +15,25 @@
package com.spectralogic.ds3client.models.bulk;
-import com.fasterxml.jackson.annotation.JsonFilter;
+import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
+import com.spectralogic.ds3client.serializer.Views;
+
+import java.util.Objects;
+import java.util.UUID;
-@JsonFilter("sizeFilter")
public class Ds3Object {
@JacksonXmlProperty(isAttribute = true, localName = "Name")
private String name;
+
+ @JsonView(Views.PutObject.class)
@JacksonXmlProperty(isAttribute = true, localName = "Size")
private long size;
+ @JsonView(Views.GetObject.class)
+ @JacksonXmlProperty(isAttribute = true, localName = "VersionId")
+ private String versionId;
+
/**
* This constructor is used for XML Serialization.
* The preferred method is to use one of the other two constructors.
@@ -41,6 +50,29 @@ public Ds3Object() {
public Ds3Object(final String name, final long size) {
this.name = name;
this.size = size;
+ this.versionId = null;
+ }
+
+ /**
+ * Use this constructor when getting files from DS3.
+ * @param name the name of the object to get from DS3
+ * @param versionId The version ID of the object to get from DS3
+ */
+ public Ds3Object(final String name, final UUID versionId) {
+ this.name = name;
+ this.size = 0;
+ this.versionId = versionId.toString();
+ }
+
+ /**
+ * Use this constructor when getting files from DS3.
+ * @param name the name of the object to get from DS3
+ * @param versionId The version ID of the object to get from DS3
+ */
+ public Ds3Object(final String name, final String versionId) {
+ this.name = name;
+ this.size = 0;
+ this.versionId = versionId;
}
/**
@@ -50,6 +82,7 @@ public Ds3Object(final String name, final long size) {
public Ds3Object(final String name) {
this.name = name;
this.size = 0;
+ this.versionId = null;
}
public String getName() {
@@ -68,6 +101,14 @@ public void setSize(final long size) {
this.size = size;
}
+ public String getVersionId() {
+ return versionId;
+ }
+
+ public void setVersionId(String versionId) {
+ this.versionId = versionId;
+ }
+
@Override
public String toString() {
return this.name + ":" + this.size;
@@ -75,18 +116,17 @@ public String toString() {
@Override
public int hashCode() {
- return java.util.Objects.hash(this.name, this.size);
+ return java.util.Objects.hash(this.name, this.size, this.versionId);
}
@Override
public boolean equals(final Object obj) {
- if (obj instanceof Ds3Object) {
- final Ds3Object ds3Obj = (Ds3Object) obj;
- if (ds3Obj.getName().equals(this.getName()) &&
- ds3Obj.getSize() == this.getSize()) {
- return true;
- }
+ if (!(obj instanceof Ds3Object)) {
+ return false;
}
- return false;
+ final Ds3Object ds3Obj = (Ds3Object) obj;
+ return Objects.equals(ds3Obj.getName(), this.getName()) &&
+ ds3Obj.getSize() == this.getSize() &&
+ Objects.equals(ds3Obj.versionId, this.getVersionId());
}
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3ObjectList.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3ObjectList.java
index e6f5d6565..b788855e9 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3ObjectList.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/Ds3ObjectList.java
@@ -31,15 +31,6 @@ public class Ds3ObjectList {
@JsonProperty("Object")
private Stream objects;
- @JacksonXmlProperty(isAttribute = true, namespace = "", localName = "Priority")
- private Priority priority;
-
- @JacksonXmlProperty(isAttribute = true, namespace = "", localName = "WriteOptimization")
- private WriteOptimization writeOptimization;
-
- @JacksonXmlProperty(isAttribute = true, namespace = "", localName = "ChunkClientProcessingOrderGuarantee")
- private JobChunkClientProcessingOrderGuarantee chunkClientProcessingOrderGuarantee;
-
public Ds3ObjectList() {
}
@@ -54,28 +45,4 @@ public Iterable getObjects() {
public void setObjects(final Iterable objects) {
this.objects = StreamSupport.stream(objects.spliterator(), false);
}
-
- public Priority getPriority() {
- return priority;
- }
-
- public void setPriority(final Priority priority) {
- this.priority = priority;
- }
-
- public WriteOptimization getWriteOptimization() {
- return this.writeOptimization;
- }
-
- public void setWriteOptimization(final WriteOptimization writeOptimization) {
- this.writeOptimization = writeOptimization;
- }
-
- public JobChunkClientProcessingOrderGuarantee getChunkClientProcessingOrderGuarantee() {
- return this.chunkClientProcessingOrderGuarantee;
- }
-
- public void setChunkClientProcessingOrderGuarantee(final JobChunkClientProcessingOrderGuarantee chunkClientProcessingOrderGuarantee) {
- this.chunkClientProcessingOrderGuarantee = chunkClientProcessingOrderGuarantee;
- }
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/PartialDs3Object.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/PartialDs3Object.java
index 1ed151d08..ba6aa5666 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/PartialDs3Object.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/models/bulk/PartialDs3Object.java
@@ -18,6 +18,8 @@
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import com.spectralogic.ds3client.models.common.Range;
+import java.util.UUID;
+
public class PartialDs3Object extends Ds3Object {
@JsonUnwrapped
@@ -28,6 +30,16 @@ public PartialDs3Object(final String name, final Range range) {
this.range = range;
}
+ public PartialDs3Object(final String name, final Range range, final UUID versionId) {
+ super(name, versionId);
+ this.range = range;
+ }
+
+ public PartialDs3Object(final String name, final Range range, final String versionId) {
+ super(name, versionId);
+ this.range = range;
+ }
+
public Range getRange() {
return range;
}
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/Views.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/Views.java
new file mode 100644
index 000000000..97f91dcfb
--- /dev/null
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/Views.java
@@ -0,0 +1,15 @@
+package com.spectralogic.ds3client.serializer;
+
+/**
+ * Used to annotate Ds3Object attributes to specify which attributes are
+ * unique to bulk get vs bulk put request payloads. Note that parameters
+ * with no annotation will be marshaled into both get and put payloads.
+ * These are used with the JsonView annotation.
+ */
+public class Views {
+ /** Denotes parameters within Ds3Object which are unique to get object request payloads */
+ public static class GetObject { }
+
+ /** Denotes parameters within Ds3Object which are unique to get object request payloads */
+ public static class PutObject { }
+}
\ No newline at end of file
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/XmlOutput.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/XmlOutput.java
index ab2f78f90..8e49998b8 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/XmlOutput.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/serializer/XmlOutput.java
@@ -17,21 +17,18 @@
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ser.FilterProvider;
-import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
import com.spectralogic.ds3client.models.bulk.Ds3ObjectList;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public final class XmlOutput {
private static final JacksonXmlModule module;
@@ -88,13 +85,13 @@ public static String toXml(final Object object) {
return toXml(object, null);
}
- private static String toXml(final Object object, final FilterProvider filterProvider) {
+ private static String toXml(final Object object, final Class view) {
try {
- if (filterProvider == null) {
+ if (view == null) {
return mapper.writeValueAsString(object);
}
else {
- return mapper.writer(filterProvider).writeValueAsString(object);
+ return mapper.writerWithView(view).writeValueAsString(object);
}
}
catch(final JsonProcessingException e) {
@@ -104,11 +101,9 @@ private static String toXml(final Object object, final FilterProvider filterProv
public static String toXml(final Ds3ObjectList objects, final boolean isBulkPut) {
if (isBulkPut) {
- return XmlOutput.toXml(objects);
+ return XmlOutput.toXml(objects, Views.PutObject.class);
}
- final FilterProvider filters = new SimpleFilterProvider().addFilter("sizeFilter",
- SimpleBeanPropertyFilter.serializeAllExcept("Size"));
- return XmlOutput.toXml(objects, filters);
+ return XmlOutput.toXml(objects, Views.GetObject.class);
}
public static T fromXml(final String xmlString, final Class type) throws IOException {
diff --git a/ds3-sdk/src/main/java/com/spectralogic/ds3client/utils/Signature.java b/ds3-sdk/src/main/java/com/spectralogic/ds3client/utils/Signature.java
index 89b24e39c..cf5f84a9d 100644
--- a/ds3-sdk/src/main/java/com/spectralogic/ds3client/utils/Signature.java
+++ b/ds3-sdk/src/main/java/com/spectralogic/ds3client/utils/Signature.java
@@ -91,14 +91,18 @@ public static String canonicalizeResource(final String path, final Map