-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/64971/
-----------------------------------------------------------

Review request for Ambari, Balázs Bence Sári, Dmytro Sen, Jayush Luniya, 
Madhuvanthi Radhakrishnan, Robert Nettleton, and Vitalyi Brodetskyi.


Repository: ambari


Description
-------

A few changes for Blueprint V2 work were initially commited on 
`branch-feature-AMBARI-14714` before the "private" feature branch 
`branch-feature-AMBARI-14714-blueprintv2` was forked.  This change mostly 
reverts those commits.

It also fixes `ServiceComponentRequest` usage in `AmbariContext` (wrong 
constructor was used), and expectations for `createServices` and 
`createComponents` in `AmbariContextTest` (they are no longer `void` methods).

The only functional change compared to `trunk` blueprint code is that it 
creates a default service group when provisioning the cluster.  This is allows 
successful deployment using "old" blueprints.


Diffs
-----

  
ambari-server/src/main/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRenderer.java
 7171fc79c2d6997c1aa3669a96704e3f35592fa8 
  
ambari-server/src/main/java/org/apache/ambari/server/api/services/ServiceService.java
 76782d5988364654a5326b5975b1449d7ddea854 
  
ambari-server/src/main/java/org/apache/ambari/server/api/services/stackadvisor/StackAdvisorBlueprintProcessor.java
 9bbdc37a62cc82e22e3ecb14d016571c63f8943f 
  
ambari-server/src/main/java/org/apache/ambari/server/api/services/users/ActiveWidgetLayoutService.java
 2667a0c5d283d2cb2b2e361de833db43d98e144c 
  
ambari-server/src/main/java/org/apache/ambari/server/api/services/views/ViewInstanceService.java
 036f1bdb17495dd98ad84c9fed4c2e95d88b4a81 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
 c88b23c8af374dd9bd695b70560079871f3366fd 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/ServiceGroupRequest.java
 53c3d1e77144458566b49b98d9a8c51381f6ff29 
  ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2.java 
0b0329c31bb5800eb32ba4b437bd57a41a618dbe 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/StackV2Factory.java
 784b3683ba9d3909bb9e6d900e4175b6a00aec9a 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/AbstractControllerResourceProvider.java
 5104354fce7701fe023723c19d56d25e7adf5219 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BaseClusterRequest.java
 a38f478ed05ec88816e6363b31aa102a4a9d353f 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessor.java
 d2f24d9445ea5a33aaf1d286ff40bfc91787c277 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/BlueprintV2ResourceProvider.java
 6d2c4f06f5c75fbdf9e81c2d711440862f375bb9 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClusterResourceProvider.java
 cc0cea377233931bf65943f792f6a7e11b074f06 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ConfigurationContext.java
 aa63021b8a5a4e386652b936ceaefe6c2298797e 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ExportBlueprintRequest.java
 565369b08b6eeb1a598575e448ce0c6334b6234b 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequest.java
 f773fc8aac61f74988dd63a7a8b2cc30053023d2 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ScaleClusterRequest.java
 1284c265c150aa03c00b43b364c2163ca4e564a5 
  
ambari-server/src/main/java/org/apache/ambari/server/controller/internal/UnitUpdater.java
 3a70f8124be3034f29edd51a96e00b8e25dfd661 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/dao/BlueprintV2DAO.java
 6a054e8c9038acb63579065e6093193a3735eb90 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/BlueprintEntity.java
 8141f070bb40872fea9fae12e72adcf778ba8225 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/BlueprintV2Entity.java
 de9bde42b50bdcb073ae6e1b19a835788b00f049 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostGroupComponentEntity.java
 bd34d29ed89d28df37359522c72749395695b3cf 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/HostGroupComponentEntityPK.java
 812f0d68c867bd9366c7c3dd62cf789389af0f45 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/StackEntity.java
 e8047973f9915e62f5a448476064fddec96be630 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/TopologyConfigurationsEntity.java
 a29db99e48ee9bd667c9b150fe490a95dd5bd4bb 
  
ambari-server/src/main/java/org/apache/ambari/server/orm/entities/TopologyRequestEntity.java
 4b431f136e1649c79fd1f962c660561305575d4d 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/AmbariContext.java
 381184800da3ded4a9074dcb6ac4014a4b3d3a2c 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintImplV2.java
 d31e9d44e7ab79d09b74171387c5ad32caf1a65e 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2.java 
9ca024810edbed9d9eb3ebaf2107c994db2bf1df 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintV2Factory.java
 7b228e57ad176bff43533127b840270efc115fa6 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorImpl.java
 7155dcc52b60a49d286fb968e490c909035af989 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/BlueprintValidatorV2.java
 cfe083e6e87fb697cbb391369243dec64e677b0e 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterConfigurationRequest.java
 3273a4ead6bb3546c16676cd5e748a669e518a45 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopology.java
 289f053ccef23d67fa1db9dd298d53d38098ed3b 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/ClusterTopologyImpl.java
 db3f29bda9cc2300ba135dbb7dff7903f219ca41 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/ComponentV2.java 
68744d4938f4e9fb171077ef6bee98fc298509fb 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/Configurable.java 
74308ab3d8caf5745478da2975da5c3c6429a5ba 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/Configuration.java
 28dbbaa5af9a7321db8773d85be60ad771dd34d6 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupImpl.java
 9d3a1b84d6919d49f2cb699cbec24457d8b746e9 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupInfo.java
 7cbdd98cf349b7100bb0ffac96109ff10f959893 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2.java 
8da24bd3c7891a1a988ba0470210f3d4ca908032 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/HostGroupV2Impl.java
 01f34da4b530045eb749b8955f1a737701400d19 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/HostRequest.java 
685d20860769b109da5138e29649d3303d3a594b 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/LogicalRequest.java
 fc6101df2adbae80d35ea88f31238eca6b7e4290 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/PersistedStateImpl.java
 1374a42fa190f89b48913b98908583694c05378b 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/RepositoryVersion.java
 8eb666313619006fd664d4047e596ce7678772a1 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/SecurityConfiguration.java
 7955169da4639d1322d81b4499cc546604889e46 
  ambari-server/src/main/java/org/apache/ambari/server/topology/Service.java 
317e29f17cb0b0cfdc86e41f96e6266f75c673f0 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/ServiceGroup.java 
7f38b2c67a03165dd5616cf5ea7355e28f44d136 
  ambari-server/src/main/java/org/apache/ambari/server/topology/ServiceId.java 
2d81a07ad37d9f07c7a294316887bf037b6a54d9 
  ambari-server/src/main/java/org/apache/ambari/server/topology/Setting.java 
34542e13c4aa66c8e6513d03672a7049accc83b3 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyManager.java
 3b7dcc88bacb376afc25c7970e7c1f683f0724b7 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/TopologyRequest.java
 632473a374ba9422006ece98c1e6286eaecd5105 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/tasks/PersistHostResourcesTask.java
 00eb706b348a8b5a7ac5516f7b8a62ece6013b13 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/ClusterConfigTypeValidator.java
 7ac75e937d8ac3c8cc6e65d3a5f6d4838fff8bbc 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/HiveServiceValidator.java
 80b65607e0b2dfcef59c59bfdf7c9797032e0300 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidator.java
 fd07572f985b7e136ce57793aa9ba7f659f54703 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/RequiredPasswordValidator.java
 bd21b08cecc7288c5e7fe2d1928520ec3bdfb9bb 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/StackConfigTypeValidator.java
 2adda1001cedaf1aef37baec6c5ad28be5685415 
  
ambari-server/src/main/java/org/apache/ambari/server/topology/validators/UnitValidator.java
 00b983861f3dc672284a895c55da90920cb94904 
  ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql 
8ca235976e14b2705e2c9bd485dc4abe66cc8176 
  ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql 
8bfc7eb51487a72a992e6154933869ae5c2ec748 
  ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql 
0168af86d1f47f0a5a8ab75aa84e00c72ba0908d 
  ambari-server/src/main/resources/Ambari-DDL-Postgres-CREATE.sql 
1ebc0ee964312e9d58b7bbdcb69ee1e607e010ab 
  ambari-server/src/main/resources/Ambari-DDL-SQLAnywhere-CREATE.sql 
dc4bafd62226d9dd3d84f6cd908a50904aef88af 
  ambari-server/src/main/resources/Ambari-DDL-SQLServer-CREATE.sql 
8bef24f5b9adfe6ee54d549a31a2e8d08fdd795f 
  ambari-server/src/main/resources/META-INF/persistence.xml 
336dc7a700415db440fdc50891c65ec4f298ebe1 
  ambari-server/src/main/resources/properties.json 
225bd9e85cc36179f71b92bab839c40e529921c3 
  
ambari-server/src/test/java/org/apache/ambari/server/api/query/render/ClusterBlueprintRendererTest.java
 3d44c5544c28297d695f4cd6475f4184ad181935 
  
ambari-server/src/test/java/org/apache/ambari/server/api/services/AmbariMetaInfoTest.java
 bbd0feabee9c8d806383b5830fdb2844b94e91a0 
  
ambari-server/src/test/java/org/apache/ambari/server/api/services/RootServiceServiceTest.java
 490d2da3b5de3268adaa383172c0e322337ced18 
  
ambari-server/src/test/java/org/apache/ambari/server/api/services/ServiceServiceTest.java
 b8384a67137a474673f45fbc33e93ffc50ef3ea2 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
 34bbb8ce6a3062ea03baa2e099e6a4a9c14ea416 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintConfigurationProcessorTest.java
 f9765f2a8ac1f2f438253ad86401345c6da5e01c 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/BlueprintResourceProviderTest.java
 48d6f205fad71aac0ac2eca68e0000c7e1b53766 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterResourceProviderTest.java
 6e503a6fd91e691841ba9e9681f8aea8ec448ae4 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ExportBlueprintRequestTest.java
 743d1d554a892992798685aacc82a12d0a37c9cb 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ProvisionClusterRequestTest.java
 01d69a51095936e6c10bf3c77447bf0ed65c8131 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/RequestResourceProviderTest.java
 4e5225065a461c270e5dc846f12463d9619cfcd8 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ScaleClusterRequestTest.java
 b1e52cc120683b0de42b9a4b59514fe37ba076f9 
  
ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UnitUpdaterTest.java
 320e167b4f56749955644aad742b6db9d59d3aa9 
  
ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyLogicalRequestDAOTest.java
 bd529c9911ebf3a3cc39698f8a92ebeefb33156f 
  
ambari-server/src/test/java/org/apache/ambari/server/orm/dao/TopologyRequestDAOTest.java
 3437d7d1f0aca7c0316abda1066ad51ca7939f78 
  
ambari-server/src/test/java/org/apache/ambari/server/state/cluster/ClusterTest.java
 87f6685ec0e1124732585a88a3f912af2f9f6234 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/AmbariContextTest.java
 16de535efc3c6ba3064ca2be5841b19b69038b1a 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/BlueprintImplTest.java
 dd8ea61d3c2139d52d7e155eb7e8baf0dd392e2c 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterConfigurationRequestTest.java
 ca74cf02512b4fca0d5667a4be98cb44d880fd09 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterDeployWithStartOnlyTest.java
 a22cef355dd083001a373a823f138a59a28f1c47 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartOnComponentLevelTest.java
 ba2118d5a95cd1e1649085640928317ff3bec6b6 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterInstallWithoutStartTest.java
 8d58107618c9b6ba786ea328cd5794e9d300b128 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/ClusterTopologyImplTest.java
 d8c266dcef4cc34802686a32f9f85f80eeced609 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/LogicalRequestTest.java
 02e4e75cf1221f3e4ca1e408cbd745f0447da873 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/RequiredPasswordValidatorTest.java
 e2b33464e0e5c1b8f981bc7ad8065960436981f8 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/TopologyManagerTest.java
 4eb29b721e8250b1fc91fb4b014abfc90a291762 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/BlueprintImplV2Test.java
 ad2cdbdaf60149d12e782674a95cdf8c52ab3e23 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/ClusterConfigTypeValidatorTest.java
 e4695766133d9e85d6732cb6dfe19a6ad5825e88 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/HiveServiceValidatorTest.java
 45d0b3eca68be78b898321d041e6d6f53c209f40 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/RequiredConfigPropertiesValidatorTest.java
 f6b4ec8cb476dc5ef9874328c17599c538163dba 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/StackConfigTypeValidatorTest.java
 28739dcce690928c4ece51afecbe4e32a630ec7f 
  
ambari-server/src/test/java/org/apache/ambari/server/topology/validators/UnitValidatorTest.java
 ca42ecc052bd1f0f67c5275f76c52ba4a3b083da 
  ambari-server/src/test/resources/blueprintv2/blueprintv2.json 
c5e2541ff58697f24f829878e7b3f35226c3ec80 


Diff: https://reviews.apache.org/r/64971/diff/1/


Testing
-------

Deployed HDP-2.6 cluster via "old" blueprint.

Tweaked `AmbariContextTest` to verify service group creation.

Checks pass:

```
[INFO] Rat check: Summary of files. Unapproved: 0 unknown: 0 generated: 0 
approved: 6282 licence.
...
[INFO] --- maven-checkstyle-plugin:2.17:check (checkstyle) @ ambari-server ---
[INFO] Starting audit...
Audit done.
```

Unit tests improved from:

```
Tests run: 4965, Failures: 192, Errors: 283, Skipped: 37
```

to:

```
Tests run: 4964, Failures: 37, Errors: 179, Skipped: 37
```

Specifically:

```
-Tests run: 168, Failures: 153, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.BlueprintConfigurationProcessorTest
+Tests run: 168, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.BlueprintConfigurationProcessorTest
-Tests run: 27, Failures: 0, Errors: 8, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.BlueprintResourceProviderTest
+Tests run: 27, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.BlueprintResourceProviderTest
-Tests run: 21, Failures: 0, Errors: 1, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ClusterResourceProviderTest
+Tests run: 21, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ClusterResourceProviderTest
-Tests run: 1, Failures: 0, Errors: 1, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ExportBlueprintRequestTest
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ExportBlueprintRequestTest
-Tests run: 33, Failures: 17, Errors: 16, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ProvisionClusterRequestTest
+Tests run: 17, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ProvisionClusterRequestTest
-Tests run: 16, Failures: 6, Errors: 10, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ScaleClusterRequestTest
+Tests run: 10, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.ScaleClusterRequestTest
-Tests run: 7, Failures: 0, Errors: 7, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.UnitUpdaterTest
+Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.controller.internal.UnitUpdaterTest
-Tests run: 30, Failures: 0, Errors: 30, Skipped: 0 - in 
org.apache.ambari.server.topology.AmbariContextTest
+Tests run: 15, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.AmbariContextTest
-Tests run: 11, Failures: 0, Errors: 2, Skipped: 0 - in 
org.apache.ambari.server.topology.BlueprintImplTest
+Tests run: 11, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.BlueprintImplTest
-Tests run: 9, Failures: 0, Errors: 9, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterConfigurationRequestTest
+Tests run: 9, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterConfigurationRequestTest
-Tests run: 2, Failures: 1, Errors: 1, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterDeployWithStartOnlyTest
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterDeployWithStartOnlyTest
-Tests run: 2, Failures: 1, Errors: 1, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterInstallWithoutStartOnComponentLevelTest
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterInstallWithoutStartOnComponentLevelTest
-Tests run: 2, Failures: 1, Errors: 1, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterInstallWithoutStartTest
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterInstallWithoutStartTest
-Tests run: 10, Failures: 4, Errors: 5, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterTopologyImplTest
+Tests run: 6, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.ClusterTopologyImplTest
-Tests run: 8, Failures: 1, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.HostGroupInfoTest
+Tests run: 8, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.HostGroupInfoTest
-Tests run: 7, Failures: 0, Errors: 7, Skipped: 0 - in 
org.apache.ambari.server.topology.LogicalRequestTest
+Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.LogicalRequestTest
-Tests run: 12, Failures: 0, Errors: 12, Skipped: 0 - in 
org.apache.ambari.server.topology.RequiredPasswordValidatorTest
+Tests run: 12, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.RequiredPasswordValidatorTest
-Tests run: 12, Failures: 2, Errors: 8, Skipped: 0 - in 
org.apache.ambari.server.topology.TopologyManagerTest
+Tests run: 10, Failures: 0, Errors: 0, Skipped: 0 - in 
org.apache.ambari.server.topology.TopologyManagerTest
```


Thanks,

Attila Doroszlai

Reply via email to